Add the ability to program special filters using ethtool::rxnfc which
are meant to be used for wake-up purposes (in conjuction with
WAKE_FILTER) using the special action value: -2 (RX_CLS_FLOW_WAKE).

Signed-off-by: Florian Fainelli <f.faine...@gmail.com>
---
 ethtool.8.in | 1 +
 rxclass.c    | 8 +++++---
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/ethtool.8.in b/ethtool.8.in
index 3eb9005ada48..97c7330fd373 100644
--- a/ethtool.8.in
+++ b/ethtool.8.in
@@ -871,6 +871,7 @@ Specifies the Rx queue to send packets to, or some other 
action.
 nokeep;
 lB     l.
 -1     Drop the matched flow
+-2     Use the matched flow as a Wake-on-LAN filter
 0 or higher    Rx queue to route the flow
 .TE
 .TP
diff --git a/rxclass.c b/rxclass.c
index 42d122d1ed86..79972651e706 100644
--- a/rxclass.c
+++ b/rxclass.c
@@ -251,7 +251,11 @@ static void rxclass_print_nfc_rule(struct 
ethtool_rx_flow_spec *fsp,
        if (fsp->flow_type & FLOW_RSS)
                fprintf(stdout, "\tRSS Context ID: %u\n", rss_context);
 
-       if (fsp->ring_cookie != RX_CLS_FLOW_DISC) {
+       if (fsp->ring_cookie == RX_CLS_FLOW_DISC) {
+               fprintf(stdout, "\tAction: Drop\n");
+       } else if (fsp->ring_cookie == RX_CLS_FLOW_WAKE) {
+               fprintf(stdout, "\tAction: Wake-on-LAN\n");
+       } else {
                u64 vf = ethtool_get_flow_spec_ring_vf(fsp->ring_cookie);
                u64 queue = ethtool_get_flow_spec_ring(fsp->ring_cookie);
 
@@ -266,8 +270,6 @@ static void rxclass_print_nfc_rule(struct 
ethtool_rx_flow_spec *fsp,
                else
                        fprintf(stdout, "\tAction: Direct to queue %llu\n",
                                queue);
-       } else {
-               fprintf(stdout, "\tAction: Drop\n");
        }
 
        fprintf(stdout, "\n");
-- 
2.17.1

Reply via email to