X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fmac-learning.h;h=34dc12c478a67cee4f6fb37c27b875be03c7a3e9;hb=HEAD;hp=ea5ea8a5849664497da89bdb85fe6ef37460e24f;hpb=509c014934ac5cb9a86698c3213bfe42d572fbb9;p=sliver-openvswitch.git diff --git a/lib/mac-learning.h b/lib/mac-learning.h index ea5ea8a58..34dc12c47 100644 --- a/lib/mac-learning.h +++ b/lib/mac-learning.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc. + * Copyright (c) 2008, 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. @@ -23,7 +23,6 @@ #include "ovs-atomic.h" #include "ovs-thread.h" #include "packets.h" -#include "tag.h" #include "timeval.h" struct mac_learning; @@ -46,7 +45,6 @@ struct mac_entry { time_t grat_arp_lock; /* Gratuitous ARP lock expiration time. */ uint8_t mac[ETH_ADDR_LEN]; /* Known MAC address. */ uint16_t vlan; /* VLAN tag. */ - tag_type tag; /* Tag for this learning entry. */ /* The following are marked guarded to prevent users from iterating over or * accessing a mac_entry without hodling the parent mac_learning rwlock. */ @@ -59,13 +57,6 @@ struct mac_entry { } port OVS_GUARDED; }; -/* Returns true if mac_learning_insert() just created 'mac' and the caller has - * not yet properly initialized it. */ -static inline bool mac_entry_is_new(const struct mac_entry *mac) -{ - return !mac->tag; -} - /* Sets a gratuitous ARP lock on 'mac' that will expire in * MAC_GRAT_ARP_LOCK_TIME seconds. */ static inline void mac_entry_set_grat_arp_lock(struct mac_entry *mac) @@ -89,9 +80,9 @@ struct mac_learning { unsigned long *flood_vlans; /* Bitmap of learning disabled VLANs. */ unsigned int idle_time; /* Max age before deleting an entry. */ size_t max_entries; /* Max number of learned MACs. */ - struct tag_set tags; /* Tags which have changed. */ - atomic_int ref_cnt; + struct ovs_refcount ref_cnt; struct ovs_rwlock rwlock; + bool need_revalidate; }; int mac_entry_age(const struct mac_learning *ml, const struct mac_entry *e) @@ -102,8 +93,7 @@ struct mac_learning *mac_learning_create(unsigned int idle_time); struct mac_learning *mac_learning_ref(const struct mac_learning *); void mac_learning_unref(struct mac_learning *); -void mac_learning_run(struct mac_learning *ml, struct tag_set *) - OVS_REQ_WRLOCK(ml->rwlock); +bool mac_learning_run(struct mac_learning *ml) OVS_REQ_WRLOCK(ml->rwlock); void mac_learning_wait(struct mac_learning *ml) OVS_REQ_RDLOCK(ml->rwlock); @@ -126,19 +116,17 @@ struct mac_entry *mac_learning_insert(struct mac_learning *ml, const uint8_t src[ETH_ADDR_LEN], uint16_t vlan) OVS_REQ_WRLOCK(ml->rwlock); -void mac_learning_changed(struct mac_learning *ml, struct mac_entry *e) - OVS_REQ_WRLOCK(ml->rwlock); +void mac_learning_changed(struct mac_learning *ml) OVS_REQ_WRLOCK(ml->rwlock); /* Lookup. */ struct mac_entry *mac_learning_lookup(const struct mac_learning *ml, const uint8_t dst[ETH_ADDR_LEN], - uint16_t vlan, tag_type *) + uint16_t vlan) OVS_REQ_RDLOCK(ml->rwlock); /* Flushing. */ void mac_learning_expire(struct mac_learning *ml, struct mac_entry *e) OVS_REQ_WRLOCK(ml->rwlock); -void mac_learning_flush(struct mac_learning *ml, struct tag_set *) - OVS_REQ_WRLOCK(ml->rwlock); +void mac_learning_flush(struct mac_learning *ml) OVS_REQ_WRLOCK(ml->rwlock); #endif /* mac-learning.h */