Merge "master" into "wdp".
[sliver-openvswitch.git] / datapath / flow.c
index 1aa6e29..de2d3f3 100644 (file)
@@ -114,7 +114,7 @@ struct sw_flow_actions *flow_actions_alloc(size_t n_actions)
        if (n_actions > 2 * DP_MAX_PORTS)
                return ERR_PTR(-EINVAL);
 
-       sfa = kmalloc(sizeof *sfa + n_actions * sizeof(union odp_action),
+       sfa = kmalloc(sizeof *sfa + n_actions * sizeof(union xflow_action),
                      GFP_KERNEL);
        if (!sfa)
                return ERR_PTR(-ENOMEM);
@@ -193,7 +193,7 @@ void flow_deferred_free_acts(struct sw_flow_actions *sf_acts)
        call_rcu(&sf_acts->rcu, rcu_free_acts_callback);
 }
 
-static void parse_vlan(struct sk_buff *skb, struct odp_flow_key *key)
+static void parse_vlan(struct sk_buff *skb, struct xflow_key *key)
 {
        struct qtag_prefix {
                __be16 eth_type; /* ETH_P_8021Q */
@@ -205,8 +205,7 @@ static void parse_vlan(struct sk_buff *skb, struct odp_flow_key *key)
                return;
 
        qp = (struct qtag_prefix *) skb->data;
-       key->dl_vlan = qp->tci & htons(VLAN_VID_MASK);
-       key->dl_vlan_pcp = (ntohs(qp->tci) & VLAN_PCP_MASK) >> VLAN_PCP_SHIFT;
+       key->dl_tci = qp->tci | htons(XFLOW_TCI_PRESENT);
        __skb_pull(skb, sizeof(struct qtag_prefix));
 }
 
@@ -225,17 +224,17 @@ static __be16 parse_ethertype(struct sk_buff *skb)
        proto = *(__be16 *) skb->data;
        __skb_pull(skb, sizeof(__be16));
 
-       if (ntohs(proto) >= ODP_DL_TYPE_ETH2_CUTOFF)
+       if (ntohs(proto) >= XFLOW_DL_TYPE_ETH2_CUTOFF)
                return proto;
 
        if (unlikely(skb->len < sizeof(struct llc_snap_hdr)))
-               return htons(ODP_DL_TYPE_NOT_ETH_TYPE);
+               return htons(XFLOW_DL_TYPE_NOT_ETH_TYPE);
 
        llc = (struct llc_snap_hdr *) skb->data;
        if (llc->dsap != LLC_SAP_SNAP ||
            llc->ssap != LLC_SAP_SNAP ||
            (llc->oui[0] | llc->oui[1] | llc->oui[2]) != 0)
-               return htons(ODP_DL_TYPE_NOT_ETH_TYPE);
+               return htons(XFLOW_DL_TYPE_NOT_ETH_TYPE);
 
        __skb_pull(skb, sizeof(struct llc_snap_hdr));
        return llc->ethertype;
@@ -267,7 +266,7 @@ static __be16 parse_ethertype(struct sk_buff *skb)
  * Sets OVS_CB(skb)->is_frag to %true if @skb is an IPv4 fragment, otherwise to
  * %false.
  */
-int flow_extract(struct sk_buff *skb, u16 in_port, struct odp_flow_key *key,
+int flow_extract(struct sk_buff *skb, u16 in_port, struct xflow_key *key,
                 bool *is_frag)
 {
        struct ethhdr *eth;
@@ -275,7 +274,6 @@ int flow_extract(struct sk_buff *skb, u16 in_port, struct odp_flow_key *key,
        memset(key, 0, sizeof *key);
        key->tun_id = OVS_CB(skb)->tun_id;
        key->in_port = in_port;
-       key->dl_vlan = htons(ODP_VLAN_NONE);
        *is_frag = false;
 
        /*
@@ -305,7 +303,7 @@ int flow_extract(struct sk_buff *skb, u16 in_port, struct odp_flow_key *key,
        memcpy(key->dl_src, eth->h_source, ETH_ALEN);
        memcpy(key->dl_dst, eth->h_dest, ETH_ALEN);
 
-       /* dl_type, dl_vlan, dl_vlan_pcp. */
+       /* dl_type, dl_tci. */
        __skb_pull(skb, 2 * ETH_ALEN);
        if (eth->h_proto == htons(ETH_P_8021Q))
                parse_vlan(skb, key);
@@ -384,17 +382,17 @@ int flow_extract(struct sk_buff *skb, u16 in_port, struct odp_flow_key *key,
        return 0;
 }
 
-u32 flow_hash(const struct odp_flow_key *key)
+u32 flow_hash(const struct xflow_key *key)
 {
        return jhash2((u32*)key, sizeof *key / sizeof(u32), hash_seed);
 }
 
 int flow_cmp(const struct tbl_node *node, void *key2_)
 {
-       const struct odp_flow_key *key1 = &flow_cast(node)->key;
-       const struct odp_flow_key *key2 = key2_;
+       const struct xflow_key *key1 = &flow_cast(node)->key;
+       const struct xflow_key *key2 = key2_;
 
-       return !memcmp(key1, key2, sizeof(struct odp_flow_key));
+       return !memcmp(key1, key2, sizeof(struct xflow_key));
 }
 
 /* Initializes the flow module.