X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fmac-learning.h;h=ed843cd45bc953b3e04e41ed34ac5877e21bc007;hb=36775dad3505929f8370166c33e8e0f04ca96c1c;hp=aa164d3ba762bc4b66534ec8090698cedf36e27c;hpb=a14bc59fb8f27db193d74662dc9c5cb8237177ef;p=openvswitch diff --git a/lib/mac-learning.h b/lib/mac-learning.h index aa164d3b..ed843cd4 100644 --- a/lib/mac-learning.h +++ b/lib/mac-learning.h @@ -26,7 +26,10 @@ #define MAC_HASH_MASK (MAC_HASH_SIZE - 1) #define MAC_HASH_SIZE (1u << MAC_HASH_BITS) -#define MAC_MAX 1024 +#define MAC_MAX 2048 + +/* Time, in seconds, before expiring a mac_entry due to inactivity. */ +#define MAC_ENTRY_IDLE_TIME 60 /* A MAC learning table entry. */ struct mac_entry { @@ -39,6 +42,8 @@ struct mac_entry { tag_type tag; /* Tag for this learning entry. */ }; +int mac_entry_age(const struct mac_entry *); + /* MAC learning table. */ struct mac_learning { struct list free; /* Not-in-use entries. */ @@ -47,10 +52,13 @@ struct mac_learning { struct list table[MAC_HASH_SIZE]; /* Hash table. */ struct mac_entry entries[MAC_MAX]; /* All entries. */ uint32_t secret; /* Secret for */ + unsigned long *non_learning_vlans; /* Bitmap of learning disabled VLANs. */ }; struct mac_learning *mac_learning_create(void); void mac_learning_destroy(struct mac_learning *); +bool mac_learning_set_disabled_vlans(struct mac_learning *, + unsigned long *bitmap); tag_type mac_learning_learn(struct mac_learning *, const uint8_t src[ETH_ADDR_LEN], uint16_t vlan, uint16_t src_port);