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

Function in_scrubprefixlle

freebsd/netinet/in.c:962–994  ·  view source on GitHub ↗

* Removes either all lle entries for given @ia, or lle * corresponding to @ia address. */

Source from the content-addressed store, hash-verified

960 * corresponding to @ia address.
961 */
962static void
963in_scrubprefixlle(struct in_ifaddr *ia, int all, u_int flags)
964{
965 struct sockaddr_in addr, mask;
966 struct sockaddr *saddr, *smask;
967 struct ifnet *ifp;
968
969 saddr = (struct sockaddr *)&addr;
970 bzero(&addr, sizeof(addr));
971 addr.sin_len = sizeof(addr);
972 addr.sin_family = AF_INET;
973 smask = (struct sockaddr *)&mask;
974 bzero(&mask, sizeof(mask));
975 mask.sin_len = sizeof(mask);
976 mask.sin_family = AF_INET;
977 mask.sin_addr.s_addr = ia->ia_subnetmask;
978 ifp = ia->ia_ifp;
979
980 if (all) {
981 /*
982 * Remove all L2 entries matching given prefix.
983 * Convert address to host representation to avoid
984 * doing this on every callback. ia_subnetmask is already
985 * stored in host representation.
986 */
987 addr.sin_addr.s_addr = ntohl(ia->ia_addr.sin_addr.s_addr);
988 lltable_prefix_free(AF_INET, saddr, smask, flags);
989 } else {
990 /* Remove interface address only */
991 addr.sin_addr.s_addr = ia->ia_addr.sin_addr.s_addr;
992 lltable_delete_addr(LLTABLE(ifp), LLE_IFADDR, saddr);
993 }
994}
995
996/*
997 * If there is no other address in the system that can serve a route to the

Callers 1

in_scrubprefixFunction · 0.85

Calls 3

bzeroFunction · 0.85
lltable_prefix_freeFunction · 0.85
lltable_delete_addrFunction · 0.85

Tested by

no test coverage detected