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

Function sysctl_iflist

freebsd/net/rtsock.c:2337–2399  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2335}
2336
2337static int
2338sysctl_iflist(int af, struct walkarg *w)
2339{
2340 struct ifnet *ifp;
2341 struct ifaddr *ifa;
2342 struct if_data ifd;
2343 struct rt_addrinfo info;
2344 int len, error = 0;
2345 struct sockaddr_storage ss;
2346
2347 bzero((caddr_t)&info, sizeof(info));
2348 bzero(&ifd, sizeof(ifd));
2349 CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) {
2350 if (w->w_arg && w->w_arg != ifp->if_index)
2351 continue;
2352 if_data_copy(ifp, &ifd);
2353 ifa = ifp->if_addr;
2354 info.rti_info[RTAX_IFP] = ifa->ifa_addr;
2355 error = rtsock_msg_buffer(RTM_IFINFO, &info, w, &len);
2356 if (error != 0)
2357 goto done;
2358 info.rti_info[RTAX_IFP] = NULL;
2359 if (w->w_req && w->w_tmem) {
2360 if (w->w_op == NET_RT_IFLISTL)
2361 error = sysctl_iflist_ifml(ifp, &ifd, &info, w,
2362 len);
2363 else
2364 error = sysctl_iflist_ifm(ifp, &ifd, &info, w,
2365 len);
2366 if (error)
2367 goto done;
2368 }
2369 while ((ifa = CK_STAILQ_NEXT(ifa, ifa_link)) != NULL) {
2370 if (af && af != ifa->ifa_addr->sa_family)
2371 continue;
2372 if (prison_if(w->w_req->td->td_ucred,
2373 ifa->ifa_addr) != 0)
2374 continue;
2375 info.rti_info[RTAX_IFA] = ifa->ifa_addr;
2376 info.rti_info[RTAX_NETMASK] = rtsock_fix_netmask(
2377 ifa->ifa_addr, ifa->ifa_netmask, &ss);
2378 info.rti_info[RTAX_BRD] = ifa->ifa_dstaddr;
2379 error = rtsock_msg_buffer(RTM_NEWADDR, &info, w, &len);
2380 if (error != 0)
2381 goto done;
2382 if (w->w_req && w->w_tmem) {
2383 if (w->w_op == NET_RT_IFLISTL)
2384 error = sysctl_iflist_ifaml(ifa, &info,
2385 w, len);
2386 else
2387 error = sysctl_iflist_ifam(ifa, &info,
2388 w, len);
2389 if (error)
2390 goto done;
2391 }
2392 }
2393 info.rti_info[RTAX_IFA] = NULL;
2394 info.rti_info[RTAX_NETMASK] = NULL;

Callers 1

sysctl_rtsockFunction · 0.85

Calls 9

bzeroFunction · 0.85
if_data_copyFunction · 0.85
sysctl_iflist_ifmlFunction · 0.85
sysctl_iflist_ifmFunction · 0.85
sysctl_iflist_ifamlFunction · 0.85
sysctl_iflist_ifamFunction · 0.85
rtsock_msg_bufferFunction · 0.70
rtsock_fix_netmaskFunction · 0.70
prison_ifFunction · 0.50

Tested by

no test coverage detected