Add the ability to specify through ethtool::rxnfc that a rule location is special and will be used to participate in Wake-on-LAN, by e.g: having a specific pattern be matched. When this is the case, fs->ring_cookie must be set to the special value RX_CLS_FLOW_WAKE. We also define an additional ethtool::wolinfo flag: WAKE_FILTER which can be used to configure an Ethernet adapter to allow Wake-on-LAN using previously programmed filters.
Showing the changes to include/uapi/linux (1 of 1 file). Show all
Unified · Split
| @@ -870,7 +870,8 @@ struct ethtool_flow_ext { · 869 unmodified lines | |||
| 870 | * includes the %FLOW_EXT or %FLOW_MAC_EXT flag | 870 | * includes the %FLOW_EXT or %FLOW_MAC_EXT flag |
| 871 | * (see &struct ethtool_flow_ext description). | 871 | * (see &struct ethtool_flow_ext description). |
| 872 | * @ring_cookie: RX ring/queue index to deliver to, or %RX_CLS_FLOW_DISC | 872 | * @ring_cookie: RX ring/queue index to deliver to, or %RX_CLS_FLOW_DISC |
| 873 | * if packets should be discarded | 873 | * if packets should be discarded, or %RX_CLS_FLOW_WAKE if the |
| 874 | * packets should be used for Wake-on-LAN with %WAKE_FILTER | ||
| 874 | * @location: Location of rule in the table. Locations must be | 875 | * @location: Location of rule in the table. Locations must be |
| 875 | * numbered such that a flow matching multiple rules will be | 876 | * numbered such that a flow matching multiple rules will be |
| 876 | * classified according to the first (lowest numbered) rule. | 877 | * classified according to the first (lowest numbered) rule. |
| @@ -1634,6 +1635,7 @@ static inline int ethtool_validate_duplex(__u8 duplex) · 757 unmodified lines | |||
| 1634 | #define WAKE_ARP (1 << 4) | 1635 | #define WAKE_ARP (1 << 4) |
| 1635 | #define WAKE_MAGIC (1 << 5) | 1636 | #define WAKE_MAGIC (1 << 5) |
| 1636 | #define WAKE_MAGICSECURE (1 << 6) /* only meaningful if WAKE_MAGIC */ | 1637 | #define WAKE_MAGICSECURE (1 << 6) /* only meaningful if WAKE_MAGIC */ |
| 1638 | #define WAKE_FILTER (1 << 7) | ||
| 1637 | 1639 | ||
| 1638 | /* L2-L4 network traffic flow types */ | 1640 | /* L2-L4 network traffic flow types */ |
| 1639 | #define TCP_V4_FLOW 0x01 /* hash or spec (tcp_ip4_spec) */ | 1641 | #define TCP_V4_FLOW 0x01 /* hash or spec (tcp_ip4_spec) */ |
| @@ -1671,6 +1673,7 @@ static inline int ethtool_validate_duplex(__u8 duplex) · 31 unmodified lines | |||
| 1671 | #define RXH_DISCARD (1 << 31) | 1673 | #define RXH_DISCARD (1 << 31) |
| 1672 | 1674 | ||
| 1673 | #define RX_CLS_FLOW_DISC 0xffffffffffffffffULL | 1675 | #define RX_CLS_FLOW_DISC 0xffffffffffffffffULL |
| 1676 | #define RX_CLS_FLOW_WAKE 0xfffffffffffffffeULL | ||
| 1674 | 1677 | ||
| 1675 | /* Special RX classification rule insert location values */ | 1678 | /* Special RX classification rule insert location values */ |
| 1676 | #define RX_CLS_LOC_SPECIAL 0x80000000 /* flag */ | 1679 | #define RX_CLS_LOC_SPECIAL 0x80000000 /* flag */ |