ofp-util: Add SCTP support
[sliver-openvswitch.git] / datapath / flow.h
index 5d15783..bc91ec9 100644 (file)
@@ -58,6 +58,22 @@ struct ovs_key_ipv4_tunnel {
        u8   ipv4_ttl;
 };
 
+static inline void ovs_flow_tun_key_init(struct ovs_key_ipv4_tunnel *tun_key,
+                                        const struct iphdr *iph, __be64 tun_id,
+                                        __be16 tun_flags)
+{
+       tun_key->tun_id = tun_id;
+       tun_key->ipv4_src = iph->saddr;
+       tun_key->ipv4_dst = iph->daddr;
+       tun_key->ipv4_tos = iph->tos;
+       tun_key->ipv4_ttl = iph->ttl;
+       tun_key->tun_flags = tun_flags;
+
+       /* clear struct padding. */
+       memset((unsigned char *) tun_key + OVS_TUNNEL_KEY_SIZE, 0,
+              sizeof(*tun_key) - OVS_TUNNEL_KEY_SIZE);
+}
+
 struct sw_flow_key {
        struct ovs_key_ipv4_tunnel tun_key;  /* Encapsulating tunnel key. */
        struct {
@@ -85,8 +101,8 @@ struct sw_flow_key {
                        } addr;
                        union {
                                struct {
-                                       __be16 src;             /* TCP/UDP source port. */
-                                       __be16 dst;             /* TCP/UDP destination port. */
+                                       __be16 src;             /* TCP/UDP/SCTP source port. */
+                                       __be16 dst;             /* TCP/UDP/SCTP destination port. */
                                } tp;
                                struct {
                                        u8 sha[ETH_ALEN];       /* ARP source hardware address. */
@@ -101,8 +117,8 @@ struct sw_flow_key {
                        } addr;
                        __be32 label;                   /* IPv6 flow label. */
                        struct {
-                               __be16 src;             /* TCP/UDP source port. */
-                               __be16 dst;             /* TCP/UDP destination port. */
+                               __be16 src;             /* TCP/UDP/SCTP source port. */
+                               __be16 dst;             /* TCP/UDP/SCTP destination port. */
                        } tp;
                        struct {
                                struct in6_addr target; /* ND target address. */