MCPcopy Create free account
hub / github.com/F-Stack/f-stack / add_addrsel_policyent

Function add_addrsel_policyent

freebsd/netinet6/in6_src.c:1087–1120  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1085}
1086
1087static int
1088add_addrsel_policyent(struct in6_addrpolicy *newpolicy)
1089{
1090 struct addrsel_policyent *new, *pol;
1091
1092 new = malloc(sizeof(*new), M_IFADDR,
1093 M_WAITOK);
1094 ADDRSEL_XLOCK();
1095 ADDRSEL_LOCK();
1096
1097 /* duplication check */
1098 TAILQ_FOREACH(pol, &V_addrsel_policytab, ape_entry) {
1099 if (IN6_ARE_ADDR_EQUAL(&newpolicy->addr.sin6_addr,
1100 &pol->ape_policy.addr.sin6_addr) &&
1101 IN6_ARE_ADDR_EQUAL(&newpolicy->addrmask.sin6_addr,
1102 &pol->ape_policy.addrmask.sin6_addr)) {
1103 ADDRSEL_UNLOCK();
1104 ADDRSEL_XUNLOCK();
1105 free(new, M_IFADDR);
1106 return (EEXIST); /* or override it? */
1107 }
1108 }
1109
1110 bzero(new, sizeof(*new));
1111
1112 /* XXX: should validate entry */
1113 new->ape_policy = *newpolicy;
1114
1115 TAILQ_INSERT_TAIL(&V_addrsel_policytab, new, ape_entry);
1116 ADDRSEL_UNLOCK();
1117 ADDRSEL_XUNLOCK();
1118
1119 return (0);
1120}
1121
1122static int
1123delete_addrsel_policyent(struct in6_addrpolicy *key)

Callers 1

in6_src_ioctlFunction · 0.85

Calls 3

mallocFunction · 0.85
bzeroFunction · 0.85
freeFunction · 0.50

Tested by

no test coverage detected