* Removes either all lle entries for given @ia, or lle * corresponding to @ia address. */
| 960 | * corresponding to @ia address. |
| 961 | */ |
| 962 | static void |
| 963 | in_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 |
no test coverage detected