X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fodp-util.h;h=ad0fb30ef7b76a013aa77469d85d13dfe18c192e;hb=85c9de194b9f432f7b8a66bda980cbab52a55b72;hp=5cdb204109e16d394cf94841f3e35ee776c79659;hpb=e1b1d06afdee407ccfa3c4c257b8dcfbcdd004ff;p=sliver-openvswitch.git diff --git a/lib/odp-util.h b/lib/odp-util.h index 5cdb20410..ad0fb30ef 100644 --- a/lib/odp-util.h +++ b/lib/odp-util.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc. + * Copyright (c) 2009, 2010, 2011, 2012, 2013 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,6 +28,7 @@ struct ds; struct flow; +struct flow_tnl; struct nlattr; struct ofpbuf; struct simap; @@ -50,27 +51,34 @@ int odp_actions_from_string(const char *, const struct simap *port_names, * The longest nlattr-formatted flow key appended by odp_flow_key_from_flow() * would be: * - * struct pad nl hdr total - * ------ --- ------ ----- - * OVS_KEY_ATTR_PRIORITY 4 -- 4 8 - * OVS_KEY_ATTR_TUN_ID 8 -- 4 12 - * OVS_KEY_ATTR_IPV4_TUNNEL 24 -- 4 28 - * OVS_KEY_ATTR_IN_PORT 4 -- 4 8 - * OVS_KEY_ATTR_ETHERNET 12 -- 4 16 - * OVS_KEY_ATTR_ETHERTYPE 2 2 4 8 (outer VLAN ethertype) - * OVS_KEY_ATTR_8021Q 4 -- 4 8 - * OVS_KEY_ATTR_ENCAP 0 -- 4 4 (VLAN encapsulation) - * OVS_KEY_ATTR_ETHERTYPE 2 2 4 8 (inner VLAN ethertype) - * OVS_KEY_ATTR_IPV6 40 -- 4 44 - * OVS_KEY_ATTR_ICMPV6 2 2 4 8 - * OVS_KEY_ATTR_ND 28 -- 4 32 - * ------------------------------------------------- - * total 184 + * struct pad nl hdr total + * ------ --- ------ ----- + * OVS_KEY_ATTR_PRIORITY 4 -- 4 8 + * OVS_KEY_ATTR_TUNNEL 0 -- 4 4 + * - OVS_TUNNEL_KEY_ATTR_ID 8 -- 4 12 + * - OVS_TUNNEL_KEY_ATTR_IPV4_SRC 4 -- 4 8 + * - OVS_TUNNEL_KEY_ATTR_IPV4_DST 4 -- 4 8 + * - OVS_TUNNEL_KEY_ATTR_TOS 1 3 4 8 + * - OVS_TUNNEL_KEY_ATTR_TTL 1 3 4 8 + * - OVS_TUNNEL_KEY_ATTR_DONT_FRAGMENT 0 -- 4 4 + * - OVS_TUNNEL_KEY_ATTR_CSUM 0 -- 4 4 + * OVS_KEY_ATTR_IN_PORT 4 -- 4 8 + * OVS_KEY_ATTR_SKB_MARK 4 -- 4 8 + * OVS_KEY_ATTR_ETHERNET 12 -- 4 16 + * OVS_KEY_ATTR_ETHERTYPE 2 2 4 8 (outer VLAN ethertype) + * OVS_KEY_ATTR_8021Q 4 -- 4 8 + * OVS_KEY_ATTR_ENCAP 0 -- 4 4 (VLAN encapsulation) + * OVS_KEY_ATTR_ETHERTYPE 2 2 4 8 (inner VLAN ethertype) + * OVS_KEY_ATTR_IPV6 40 -- 4 44 + * OVS_KEY_ATTR_ICMPV6 2 2 4 8 + * OVS_KEY_ATTR_ND 28 -- 4 32 + * ---------------------------------------------------------- + * total 208 * * We include some slack space in case the calculation isn't quite right or we * add another field and forget to adjust this value. */ -#define ODPUTIL_FLOW_KEY_BYTES 200 +#define ODPUTIL_FLOW_KEY_BYTES 256 /* A buffer with sufficient size and alignment to hold an nlattr-formatted flow * key. An array of "struct nlattr" might not, in theory, be sufficiently @@ -105,6 +113,8 @@ enum odp_key_fitness odp_flow_key_to_flow(const struct nlattr *, size_t, struct flow *); const char *odp_key_fitness_to_string(enum odp_key_fitness); +void commit_odp_tunnel_action(const struct flow *, struct flow *base, + struct ofpbuf *odp_actions); void commit_odp_actions(const struct flow *, struct flow *base, struct ofpbuf *odp_actions); @@ -141,8 +151,12 @@ union user_action_cookie { BUILD_ASSERT_DECL(sizeof(union user_action_cookie) == 8); size_t odp_put_userspace_action(uint32_t pid, - const union user_action_cookie *, + const void *userdata, size_t userdata_size, struct ofpbuf *odp_actions); +void odp_put_tunnel_action(const struct flow_tnl *tunnel, + struct ofpbuf *odp_actions); +void odp_put_skb_mark_action(const uint32_t skb_mark, + struct ofpbuf *odp_actions); /* Reasons why a subfacet might not be fast-pathable. */ enum slow_path_reason {