@@ -59,42 +59,47 @@ struct flow_dissector {
5959 unsigned short int offset [FLOW_DISSECTOR_KEY_MAX ];
6060};
6161
62- /* struct flow_keys:
63- * @src: source ip address in case of IPv4
64- * For IPv6 it contains 32bit hash of src address
65- * @dst: destination ip address in case of IPv4
66- * For IPv6 it contains 32bit hash of dst address
67- * @ports: port numbers of Transport header
68- * port16[0]: src port number
69- * port16[1]: dst port number
70- * @thoff: Transport header offset
71- * @n_proto: Network header protocol (eg. IPv4/IPv6)
72- * @ip_proto: Transport header protocol (eg. TCP/UDP)
73- * All the members, except thoff, are in network byte order.
74- */
75- struct flow_keys {
76- /* (src,dst) must be grouped, in the same way than in IP header */
77- __be32 src ;
78- __be32 dst ;
79- union {
80- __be32 ports ;
81- __be16 port16 [2 ];
82- };
83- u16 thoff ;
84- __be16 n_proto ;
85- u8 ip_proto ;
86- };
87-
8862void skb_flow_dissector_init (struct flow_dissector * flow_dissector ,
8963 const struct flow_dissector_key * key ,
9064 unsigned int key_count );
91- bool __skb_flow_dissect (const struct sk_buff * skb , struct flow_keys * flow ,
65+
66+ bool __skb_flow_dissect (const struct sk_buff * skb ,
67+ struct flow_dissector * flow_dissector ,
68+ void * target_container ,
9269 void * data , __be16 proto , int nhoff , int hlen );
9370
9471static inline bool skb_flow_dissect (const struct sk_buff * skb ,
95- struct flow_keys * flow )
72+ struct flow_dissector * flow_dissector ,
73+ void * target_container )
74+ {
75+ return __skb_flow_dissect (skb , flow_dissector , target_container ,
76+ NULL , 0 , 0 , 0 );
77+ }
78+
79+ struct flow_keys {
80+ struct flow_dissector_key_addrs addrs ;
81+ struct flow_dissector_key_ports ports ;
82+ struct flow_dissector_key_basic basic ;
83+ };
84+
85+ extern struct flow_dissector flow_keys_dissector ;
86+ extern struct flow_dissector flow_keys_buf_dissector ;
87+
88+ static inline bool skb_flow_dissect_flow_keys (const struct sk_buff * skb ,
89+ struct flow_keys * flow )
90+ {
91+ memset (flow , 0 , sizeof (* flow ));
92+ return __skb_flow_dissect (skb , & flow_keys_dissector , flow ,
93+ NULL , 0 , 0 , 0 );
94+ }
95+
96+ static inline bool skb_flow_dissect_flow_keys_buf (struct flow_keys * flow ,
97+ void * data , __be16 proto ,
98+ int nhoff , int hlen )
9699{
97- return __skb_flow_dissect (skb , flow , NULL , 0 , 0 , 0 );
100+ memset (flow , 0 , sizeof (* flow ));
101+ return __skb_flow_dissect (NULL , & flow_keys_buf_dissector , flow ,
102+ data , proto , nhoff , hlen );
98103}
99104
100105__be32 __skb_flow_get_ports (const struct sk_buff * skb , int thoff , u8 ip_proto ,
0 commit comments