for (i = 0; i < table->n_buckets; i++) {
struct sw_flow *flow;
struct hlist_head *head = flex_array_get(table->buckets, i);
- struct hlist_node *node, *n;
+ struct hlist_node *n;
int ver = table->node_ver;
- hlist_for_each_entry_safe(flow, node, n, head, hash_node[ver]) {
+ hlist_for_each_entry_safe(flow, n, head, hash_node[ver]) {
hlist_del_rcu(&flow->hash_node[ver]);
ovs_flow_free(flow);
}
{
struct sw_flow *flow;
struct hlist_head *head;
- struct hlist_node *n;
int ver;
int i;
while (*bucket < table->n_buckets) {
i = 0;
head = flex_array_get(table->buckets, *bucket);
- hlist_for_each_entry_rcu(flow, n, head, hash_node[ver]) {
+ hlist_for_each_entry_rcu(flow, head, hash_node[ver]) {
if (i < *last) {
i++;
continue;
for (i = 0; i < old->n_buckets; i++) {
struct sw_flow *flow;
struct hlist_head *head;
- struct hlist_node *n;
head = flex_array_get(old->buckets, i);
- hlist_for_each_entry(flow, n, head, hash_node[old_ver])
+ hlist_for_each_entry(flow, head, hash_node[old_ver])
__flow_tbl_insert(new, flow);
}
old->keep_flows = true;
proto = *(__be16 *) skb->data;
__skb_pull(skb, sizeof(__be16));
- if (ntohs(proto) >= 1536)
+ if (ntohs(proto) >= ETH_P_802_3_MIN)
return proto;
if (skb->len < sizeof(struct llc_snap_hdr))
__skb_pull(skb, sizeof(struct llc_snap_hdr));
- if (ntohs(llc->ethertype) >= 1536)
+ if (ntohs(llc->ethertype) >= ETH_P_802_3_MIN)
return llc->ethertype;
return htons(ETH_P_802_2);
struct sw_flow_key *key, int key_len)
{
struct sw_flow *flow;
- struct hlist_node *n;
struct hlist_head *head;
u8 *_key;
int key_start;
_key = (u8 *) key + key_start;
head = find_bucket(table, hash);
- hlist_for_each_entry_rcu(flow, n, head, hash_node[table->node_ver]) {
+ hlist_for_each_entry_rcu(flow, head, hash_node[table->node_ver]) {
if (flow->hash == hash &&
!memcmp((u8 *)&flow->key + key_start, _key, key_len - key_start)) {
void ovs_flow_tbl_remove(struct flow_table *table, struct sw_flow *flow)
{
+ BUG_ON(table->count == 0);
hlist_del_rcu(&flow->hash_node[table->node_ver]);
table->count--;
- BUG_ON(table->count < 0);
}
/* The size of the argument for each %OVS_KEY_ATTR_* Netlink attribute. */
[OVS_KEY_ATTR_ARP] = sizeof(struct ovs_key_arp),
[OVS_KEY_ATTR_ND] = sizeof(struct ovs_key_nd),
[OVS_KEY_ATTR_TUNNEL] = -1,
-
- /* Not upstream. */
- [OVS_KEY_ATTR_TUN_ID] = sizeof(__be64),
};
static int ipv4_flow_from_nlattrs(struct sw_flow_key *swkey, int *key_len,
attrs &= ~(1 << OVS_KEY_ATTR_SKB_MARK);
}
- if (attrs & (1ULL << OVS_KEY_ATTR_TUN_ID) &&
- attrs & (1ULL << OVS_KEY_ATTR_TUNNEL)) {
- __be64 tun_id;
-
- err = ipv4_tun_from_nlattr(a[OVS_KEY_ATTR_TUNNEL], &swkey->tun_key);
- if (err)
- return err;
-
- if (!(swkey->tun_key.tun_flags & OVS_TNL_F_KEY))
- return -EINVAL;
-
- tun_id = nla_get_be64(a[OVS_KEY_ATTR_TUN_ID]);
- if (tun_id != swkey->tun_key.tun_id)
- return -EINVAL;
-
- attrs &= ~(1ULL << OVS_KEY_ATTR_TUN_ID);
- attrs &= ~(1ULL << OVS_KEY_ATTR_TUNNEL);
- } else if (attrs & (1ULL << OVS_KEY_ATTR_TUNNEL)) {
-
+ if (attrs & (1ULL << OVS_KEY_ATTR_TUNNEL)) {
err = ipv4_tun_from_nlattr(a[OVS_KEY_ATTR_TUNNEL], &swkey->tun_key);
if (err)
return err;
if (attrs & (1 << OVS_KEY_ATTR_ETHERTYPE)) {
swkey->eth.type = nla_get_be16(a[OVS_KEY_ATTR_ETHERTYPE]);
- if (ntohs(swkey->eth.type) < 1536)
+ if (ntohs(swkey->eth.type) < ETH_P_802_3_MIN)
return -EINVAL;
attrs &= ~(1 << OVS_KEY_ATTR_ETHERTYPE);
} else {
struct ovs_key_ipv4_tunnel *tun_key = &flow->key.tun_key;
const struct nlattr *nla;
int rem;
- __be64 tun_id = 0;
flow->key.phy.in_port = DP_MAX_PORTS;
flow->key.phy.priority = 0;
flow->key.phy.priority = nla_get_u32(nla);
break;
- case OVS_KEY_ATTR_TUN_ID:
- tun_id = nla_get_be64(nla);
-
- if (tun_key->ipv4_dst) {
- if (!(tun_key->tun_flags & OVS_TNL_F_KEY))
- return -EINVAL;
- if (tun_key->tun_id != tun_id)
- return -EINVAL;
- break;
- }
- tun_key->tun_id = tun_id;
- tun_key->tun_flags |= OVS_TNL_F_KEY;
-
- break;
-
case OVS_KEY_ATTR_TUNNEL:
- if (tun_key->tun_flags & OVS_TNL_F_KEY) {
- tun_id = tun_key->tun_id;
- err = ipv4_tun_from_nlattr(nla, tun_key);
- if (err)
- return err;
-
- if (!(tun_key->tun_flags & OVS_TNL_F_KEY))
- return -EINVAL;
-
- if (tun_key->tun_id != tun_id)
- return -EINVAL;
- } else {
- err = ipv4_tun_from_nlattr(nla, tun_key);
- if (err)
- return err;
- }
+ err = ipv4_tun_from_nlattr(nla, tun_key);
+ if (err)
+ return err;
break;
case OVS_KEY_ATTR_IN_PORT:
ipv4_tun_to_nlattr(skb, &swkey->tun_key))
goto nla_put_failure;
- if ((swkey->tun_key.tun_flags & OVS_TNL_F_KEY) &&
- nla_put_be64(skb, OVS_KEY_ATTR_TUN_ID, swkey->tun_key.tun_id))
- goto nla_put_failure;
-
if (swkey->phy.in_port != DP_MAX_PORTS &&
nla_put_u32(skb, OVS_KEY_ATTR_IN_PORT, swkey->phy.in_port))
goto nla_put_failure;