| .. | .. |
|---|
| 161 | 161 | */ |
|---|
| 162 | 162 | |
|---|
| 163 | 163 | /* |
|---|
| 164 | + * "xdp-headroom" is used to request that extra space is added |
|---|
| 165 | + * for XDP processing. The value is measured in bytes and passed by |
|---|
| 166 | + * the frontend to be consistent between both ends. |
|---|
| 167 | + * If the value is greater than zero that means that |
|---|
| 168 | + * an RX response is going to be passed to an XDP program for processing. |
|---|
| 169 | + * XEN_NETIF_MAX_XDP_HEADROOM defines the maximum headroom offset in bytes |
|---|
| 170 | + * |
|---|
| 171 | + * "feature-xdp-headroom" is set to "1" by the netback side like other features |
|---|
| 172 | + * so a guest can check if an XDP program can be processed. |
|---|
| 173 | + */ |
|---|
| 174 | +#define XEN_NETIF_MAX_XDP_HEADROOM 0x7FFF |
|---|
| 175 | + |
|---|
| 176 | +/* |
|---|
| 164 | 177 | * Control ring |
|---|
| 165 | 178 | * ============ |
|---|
| 166 | 179 | * |
|---|
| .. | .. |
|---|
| 846 | 859 | #define XEN_NETIF_EXTRA_TYPE_MCAST_ADD (2) /* u.mcast */ |
|---|
| 847 | 860 | #define XEN_NETIF_EXTRA_TYPE_MCAST_DEL (3) /* u.mcast */ |
|---|
| 848 | 861 | #define XEN_NETIF_EXTRA_TYPE_HASH (4) /* u.hash */ |
|---|
| 849 | | -#define XEN_NETIF_EXTRA_TYPE_MAX (5) |
|---|
| 862 | +#define XEN_NETIF_EXTRA_TYPE_XDP (5) /* u.xdp */ |
|---|
| 863 | +#define XEN_NETIF_EXTRA_TYPE_MAX (6) |
|---|
| 850 | 864 | |
|---|
| 851 | 865 | /* xen_netif_extra_info_t flags. */ |
|---|
| 852 | 866 | #define _XEN_NETIF_EXTRA_FLAG_MORE (0) |
|---|
| .. | .. |
|---|
| 879 | 893 | uint8_t algorithm; |
|---|
| 880 | 894 | uint8_t value[4]; |
|---|
| 881 | 895 | } hash; |
|---|
| 896 | + struct { |
|---|
| 897 | + uint16_t headroom; |
|---|
| 898 | + uint16_t pad[2]; |
|---|
| 899 | + } xdp; |
|---|
| 882 | 900 | uint16_t pad[3]; |
|---|
| 883 | 901 | } u; |
|---|
| 884 | 902 | }; |
|---|