flow_keys: Record IP layer protocol in skb_flow_dissect()
skb_flow_dissect() dissects only transport header type in ip_proto. It dose not give any information about IPv4 or IPv6. This patch adds new member, n_proto, to struct flow_keys. Which records the IP layer type. i.e IPv4 or IPv6. This can be used in netdev->ndo_rx_flow_steer driver function to dissect flow. Adding new member to flow_keys increases the struct size by around 4 bytes. This causes BUILD_BUG_ON(sizeof(qcb->data) < sz); to fail in qdisc_cb_private_validate() So increase data size by 4 Signed-off-by: Govindarajulu Varadarajan <_govind@gmx.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
eef929622b
Коммит
e0f31d8498
|
@ -1,6 +1,19 @@
|
|||
#ifndef _NET_FLOW_KEYS_H
|
||||
#define _NET_FLOW_KEYS_H
|
||||
|
||||
/* struct flow_keys:
|
||||
* @src: source ip address in case of IPv4
|
||||
* For IPv6 it contains 32bit hash of src address
|
||||
* @dst: destination ip address in case of IPv4
|
||||
* For IPv6 it contains 32bit hash of dst address
|
||||
* @ports: port numbers of Transport header
|
||||
* port16[0]: src port number
|
||||
* port16[1]: dst port number
|
||||
* @thoff: Transport header offset
|
||||
* @n_proto: Network header protocol (eg. IPv4/IPv6)
|
||||
* @ip_proto: Transport header protocol (eg. TCP/UDP)
|
||||
* All the members, except thoff, are in network byte order.
|
||||
*/
|
||||
struct flow_keys {
|
||||
/* (src,dst) must be grouped, in the same way than in IP header */
|
||||
__be32 src;
|
||||
|
@ -10,6 +23,7 @@ struct flow_keys {
|
|||
__be16 port16[2];
|
||||
};
|
||||
u16 thoff;
|
||||
u16 n_proto;
|
||||
u8 ip_proto;
|
||||
};
|
||||
|
||||
|
|
|
@ -231,7 +231,7 @@ struct qdisc_skb_cb {
|
|||
unsigned int pkt_len;
|
||||
u16 slave_dev_queue_mapping;
|
||||
u16 _pad;
|
||||
unsigned char data[20];
|
||||
unsigned char data[24];
|
||||
};
|
||||
|
||||
static inline void qdisc_cb_private_validate(const struct sk_buff *skb, int sz)
|
||||
|
|
|
@ -175,6 +175,7 @@ ipv6:
|
|||
break;
|
||||
}
|
||||
|
||||
flow->n_proto = proto;
|
||||
flow->ip_proto = ip_proto;
|
||||
flow->ports = skb_flow_get_ports(skb, nhoff, ip_proto);
|
||||
flow->thoff = (u16) nhoff;
|
||||
|
|
Загрузка…
Ссылка в новой задаче