| 183 | EVENTHANDLER_DEFINE(ifaddr_event_ext, srcaddr_change_event, NULL, 0); |
| 184 | |
| 185 | static struct srcaddrtab * |
| 186 | encap_register_srcaddr(struct srcaddrtab_head *head, encap_srcaddr_t func, |
| 187 | void *arg, int mflags) |
| 188 | { |
| 189 | struct srcaddrtab *p, *tmp; |
| 190 | |
| 191 | if (func == NULL) |
| 192 | return (NULL); |
| 193 | p = malloc(sizeof(*p), M_NETADDR, mflags); |
| 194 | if (p == NULL) |
| 195 | return (NULL); |
| 196 | p->srcaddr = func; |
| 197 | p->arg = arg; |
| 198 | |
| 199 | SRCADDR_WLOCK(); |
| 200 | CK_LIST_FOREACH(tmp, head, chain) { |
| 201 | if (func == tmp->srcaddr && arg == tmp->arg) |
| 202 | break; |
| 203 | } |
| 204 | if (tmp == NULL) |
| 205 | CK_LIST_INSERT_HEAD(head, p, chain); |
| 206 | SRCADDR_WUNLOCK(); |
| 207 | |
| 208 | if (tmp != NULL) { |
| 209 | free(p, M_NETADDR); |
| 210 | p = tmp; |
| 211 | } |
| 212 | return (p); |
| 213 | } |
| 214 | |
| 215 | static int |
| 216 | encap_unregister_srcaddr(struct srcaddrtab_head *head, |
no test coverage detected