mac-learning: Make data structures public.
authorBen Pfaff <blp@nicira.com>
Mon, 8 Jun 2009 19:20:38 +0000 (12:20 -0700)
committerBen Pfaff <blp@nicira.com>
Mon, 8 Jun 2009 19:26:11 +0000 (12:26 -0700)
The vswitchd bonding code needs to iterate through the table entries to
be able to send out gratuitous learning packets when bond slaves go down.
It might be best to create an abstract interface to the MAC learning table,
but this commit does the simpler thing and exposes the data structures in
the header file.

lib/mac-learning.c
lib/mac-learning.h

index f036680..0c169d0 100644 (file)
 #define THIS_MODULE VLM_mac_learning
 #include "vlog.h"
 
-#define MAC_HASH_BITS 10
-#define MAC_HASH_MASK (MAC_HASH_SIZE - 1)
-#define MAC_HASH_SIZE (1u << MAC_HASH_BITS)
-
-#define MAC_MAX 1024
-
-/* A MAC learning table entry. */
-struct mac_entry {
-    struct list hash_node;      /* Element in a mac_learning 'table' list. */
-    struct list lru_node;       /* Element in 'lrus' or 'free' list. */
-    time_t expires;             /* 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. */
-};
-
-/* MAC learning table. */
-struct mac_learning {
-    struct list free;           /* Not-in-use entries. */
-    struct list lrus;           /* In-use entries, least recently used at the
-                                   front, most recently used at the back. */
-    struct list table[MAC_HASH_SIZE]; /* Hash table. */
-    struct mac_entry entries[MAC_MAX]; /* All entries. */
-    uint32_t secret;            /* Secret for  */
-};
-
 static uint32_t
 mac_table_hash(const uint8_t mac[ETH_ADDR_LEN], uint16_t vlan)
 {
index fc1d620..4e844b8 100644 (file)
 #ifndef MAC_LEARNING_H
 #define MAC_LEARNING_H 1
 
+#include <time.h>
+#include "list.h"
 #include "packets.h"
 #include "tag.h"
 
+#define MAC_HASH_BITS 10
+#define MAC_HASH_MASK (MAC_HASH_SIZE - 1)
+#define MAC_HASH_SIZE (1u << MAC_HASH_BITS)
+
+#define MAC_MAX 1024
+
+/* A MAC learning table entry. */
+struct mac_entry {
+    struct list hash_node;      /* Element in a mac_learning 'table' list. */
+    struct list lru_node;       /* Element in 'lrus' or 'free' list. */
+    time_t expires;             /* 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. */
+};
+
+/* MAC learning table. */
+struct mac_learning {
+    struct list free;           /* Not-in-use entries. */
+    struct list lrus;           /* In-use entries, least recently used at the
+                                   front, most recently used at the back. */
+    struct list table[MAC_HASH_SIZE]; /* Hash table. */
+    struct mac_entry entries[MAC_MAX]; /* All entries. */
+    uint32_t secret;            /* Secret for  */
+};
+
 struct mac_learning *mac_learning_create(void);
 void mac_learning_destroy(struct mac_learning *);
 tag_type mac_learning_learn(struct mac_learning *,