mac-learning: Change mac_learning_set_flood_vlans() to not take ownership.
[sliver-openvswitch.git] / lib / mac-learning.h
index c5c94bb..d9fa433 100644 (file)
@@ -44,8 +44,13 @@ 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. */
-    int port;                   /* Port on which MAC was most recently seen. */
     tag_type tag;               /* Tag for this learning entry. */
+
+    /* Learned port. */
+    union {
+        void *p;
+        int i;
+    } port;
 };
 
 int mac_entry_age(const struct mac_entry *);
@@ -68,7 +73,7 @@ static inline void mac_entry_set_grat_arp_lock(struct mac_entry *mac)
  * has ever been asserted or if it has expired. */
 static inline bool mac_entry_is_grat_arp_locked(const struct mac_entry *mac)
 {
-    return time_now() >= mac->grat_arp_lock;
+    return time_now() < mac->grat_arp_lock;
 }
 
 /* MAC learning table. */
@@ -91,7 +96,7 @@ void mac_learning_wait(struct mac_learning *);
 
 /* Configuration. */
 bool mac_learning_set_flood_vlans(struct mac_learning *,
-                                  unsigned long *bitmap);
+                                  const unsigned long *bitmap);
 
 /* Learning. */
 bool mac_learning_may_learn(const struct mac_learning *,
@@ -108,6 +113,7 @@ struct mac_entry *mac_learning_lookup(const struct mac_learning *,
                                       uint16_t vlan, tag_type *);
 
 /* Flushing. */
+void mac_learning_expire(struct mac_learning *, struct mac_entry *);
 void mac_learning_flush(struct mac_learning *);
 
 #endif /* mac-learning.h */