Lines Matching refs:entry
41 struct entry {
42 TAILQ_ENTRY(entry) link;
46 static TAILQ_HEAD(, entry) entries = TAILQ_HEAD_INITIALIZER(entries);
48 static struct entry *get_entry(unsigned char *ea);
49 static struct entry *add_entry(unsigned char *ea, int ports);
52 static struct entry *get_entry(unsigned char *ea)
55 struct entry *entry;
57 TAILQ_FOREACH(entry, &entries, link) {
58 if (memcmp(ea, entry->ea, ETHER_ADDR_LEN) == 0)
61 if (!entry && (ea[0] & 1) == 0) {
62 entry = calloc(1, sizeof(*entry));
63 if (!entry)
65 memcpy(entry->ea, ea, ETHER_ADDR_LEN);
66 entry->ports = port++ % 4;
67 TAILQ_INSERT_TAIL(&entries, entry, link);
70 return entry;
73 static struct entry *add_entry(unsigned char *ea, int ports)
75 struct entry *entry = get_entry(ea);
77 if (!entry) {
78 entry = calloc(1, sizeof(*entry));
79 if (!entry)
81 memcpy(entry->ea, ea, ETHER_ADDR_LEN);
82 TAILQ_INSERT_TAIL(&entries, entry, link);
84 entry->ports = ports;
86 return entry;
91 struct entry *entry = get_entry(ea);
94 *ports = entry ? entry->ports : -1;
95 if (entry) {
96 TAILQ_REMOVE(&entries, entry, link);
97 free(entry);
103 struct entry *entry, *next;
105 TAILQ_FOREACH_SAFE(entry, &entries, link, next) {
106 TAILQ_REMOVE(&entries, entry, link);
107 free(entry);
126 struct entry *entry = get_entry(haddr);
127 int ports = entry ? entry->ports : -1;
137 struct entry *entry = get_entry(maddr);
138 int value, ports = entry ? entry->ports : 0;
153 struct entry *entry = get_entry(maddr);
154 int value, ports = entry ? entry->ports : 0;