Changeset View
Changeset View
Standalone View
Standalone View
head/sys/netinet/ip_divert.c
Show First 20 Lines • Show All 685 Lines • ▼ Show 20 Lines | div_pcblist(SYSCTL_HANDLER_ARGS) | ||||
n = i; | n = i; | ||||
error = 0; | error = 0; | ||||
for (i = 0; i < n; i++) { | for (i = 0; i < n; i++) { | ||||
inp = inp_list[i]; | inp = inp_list[i]; | ||||
INP_RLOCK(inp); | INP_RLOCK(inp); | ||||
if (inp->inp_gencnt <= gencnt) { | if (inp->inp_gencnt <= gencnt) { | ||||
struct xinpcb xi; | struct xinpcb xi; | ||||
bzero(&xi, sizeof(xi)); | |||||
xi.xi_len = sizeof xi; | in_pcbtoxinpcb(inp, &xi); | ||||
/* XXX should avoid extra copy */ | |||||
bcopy(inp, &xi.xi_inp, sizeof *inp); | |||||
if (inp->inp_socket) | |||||
sotoxsocket(inp->inp_socket, &xi.xi_socket); | |||||
INP_RUNLOCK(inp); | INP_RUNLOCK(inp); | ||||
error = SYSCTL_OUT(req, &xi, sizeof xi); | error = SYSCTL_OUT(req, &xi, sizeof xi); | ||||
} else | } else | ||||
INP_RUNLOCK(inp); | INP_RUNLOCK(inp); | ||||
} | } | ||||
INP_INFO_WLOCK(&V_divcbinfo); | INP_INFO_WLOCK(&V_divcbinfo); | ||||
for (i = 0; i < n; i++) { | for (i = 0; i < n; i++) { | ||||
inp = inp_list[i]; | inp = inp_list[i]; | ||||
▲ Show 20 Lines • Show All 124 Lines • Show Last 20 Lines |