From 962ff3d674784ff2addac840d8a0bae0e4e9dbd2 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Mon, 8 Jun 2009 12:20:38 -0700 Subject: [PATCH] mac-learning: Make data structures public. 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 | 27 --------------------------- lib/mac-learning.h | 29 +++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/lib/mac-learning.c b/lib/mac-learning.c index f0366808..0c169d03 100644 --- a/lib/mac-learning.c +++ b/lib/mac-learning.c @@ -32,33 +32,6 @@ #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) { diff --git a/lib/mac-learning.h b/lib/mac-learning.h index fc1d6204..4e844b8b 100644 --- a/lib/mac-learning.h +++ b/lib/mac-learning.h @@ -17,9 +17,38 @@ #ifndef MAC_LEARNING_H #define MAC_LEARNING_H 1 +#include +#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 *, -- 2.30.2