mirror of
https://git.rtems.org/rtems-libbsd/
synced 2025-10-15 05:43:33 +08:00
Update to FreeBSD head 2016-12-10
Git mirror commit 80c55f08a05ab3b26a73b226ccb56adc3122a55c.
This commit is contained in:
@@ -1578,8 +1578,8 @@ sysctl_dumpentry(struct radix_node *rn, void *vw)
|
||||
}
|
||||
|
||||
static int
|
||||
sysctl_iflist_ifml(struct ifnet *ifp, struct rt_addrinfo *info,
|
||||
struct walkarg *w, int len)
|
||||
sysctl_iflist_ifml(struct ifnet *ifp, const struct if_data *src_ifd,
|
||||
struct rt_addrinfo *info, struct walkarg *w, int len)
|
||||
{
|
||||
struct if_msghdrl *ifm;
|
||||
struct if_data *ifd;
|
||||
@@ -1610,14 +1610,14 @@ sysctl_iflist_ifml(struct ifnet *ifp, struct rt_addrinfo *info,
|
||||
ifd = &ifm->ifm_data;
|
||||
}
|
||||
|
||||
if_data_copy(ifp, ifd);
|
||||
memcpy(ifd, src_ifd, sizeof(*ifd));
|
||||
|
||||
return (SYSCTL_OUT(w->w_req, (caddr_t)ifm, len));
|
||||
}
|
||||
|
||||
static int
|
||||
sysctl_iflist_ifm(struct ifnet *ifp, struct rt_addrinfo *info,
|
||||
struct walkarg *w, int len)
|
||||
sysctl_iflist_ifm(struct ifnet *ifp, const struct if_data *src_ifd,
|
||||
struct rt_addrinfo *info, struct walkarg *w, int len)
|
||||
{
|
||||
struct if_msghdr *ifm;
|
||||
struct if_data *ifd;
|
||||
@@ -1642,7 +1642,7 @@ sysctl_iflist_ifm(struct ifnet *ifp, struct rt_addrinfo *info,
|
||||
ifd = &ifm->ifm_data;
|
||||
}
|
||||
|
||||
if_data_copy(ifp, ifd);
|
||||
memcpy(ifd, src_ifd, sizeof(*ifd));
|
||||
|
||||
return (SYSCTL_OUT(w->w_req, (caddr_t)ifm, len));
|
||||
}
|
||||
@@ -1717,15 +1717,18 @@ sysctl_iflist(int af, struct walkarg *w)
|
||||
{
|
||||
struct ifnet *ifp;
|
||||
struct ifaddr *ifa;
|
||||
struct if_data ifd;
|
||||
struct rt_addrinfo info;
|
||||
int len, error = 0;
|
||||
struct sockaddr_storage ss;
|
||||
|
||||
bzero((caddr_t)&info, sizeof(info));
|
||||
bzero(&ifd, sizeof(ifd));
|
||||
IFNET_RLOCK_NOSLEEP();
|
||||
TAILQ_FOREACH(ifp, &V_ifnet, if_link) {
|
||||
if (w->w_arg && w->w_arg != ifp->if_index)
|
||||
continue;
|
||||
if_data_copy(ifp, &ifd);
|
||||
IF_ADDR_RLOCK(ifp);
|
||||
ifa = ifp->if_addr;
|
||||
info.rti_info[RTAX_IFP] = ifa->ifa_addr;
|
||||
@@ -1735,9 +1738,11 @@ sysctl_iflist(int af, struct walkarg *w)
|
||||
info.rti_info[RTAX_IFP] = NULL;
|
||||
if (w->w_req && w->w_tmem) {
|
||||
if (w->w_op == NET_RT_IFLISTL)
|
||||
error = sysctl_iflist_ifml(ifp, &info, w, len);
|
||||
error = sysctl_iflist_ifml(ifp, &ifd, &info, w,
|
||||
len);
|
||||
else
|
||||
error = sysctl_iflist_ifm(ifp, &info, w, len);
|
||||
error = sysctl_iflist_ifm(ifp, &ifd, &info, w,
|
||||
len);
|
||||
if (error)
|
||||
goto done;
|
||||
}
|
||||
@@ -1780,13 +1785,15 @@ done:
|
||||
static int
|
||||
sysctl_ifmalist(int af, struct walkarg *w)
|
||||
{
|
||||
struct ifnet *ifp;
|
||||
struct ifmultiaddr *ifma;
|
||||
struct rt_addrinfo info;
|
||||
int len, error = 0;
|
||||
struct rt_addrinfo info;
|
||||
struct ifaddr *ifa;
|
||||
struct ifmultiaddr *ifma;
|
||||
struct ifnet *ifp;
|
||||
int error, len;
|
||||
|
||||
error = 0;
|
||||
bzero((caddr_t)&info, sizeof(info));
|
||||
|
||||
IFNET_RLOCK_NOSLEEP();
|
||||
TAILQ_FOREACH(ifp, &V_ifnet, if_link) {
|
||||
if (w->w_arg && w->w_arg != ifp->if_index)
|
||||
@@ -1806,7 +1813,7 @@ sysctl_ifmalist(int af, struct walkarg *w)
|
||||
ifma->ifma_lladdr : NULL;
|
||||
error = rtsock_msg_buffer(RTM_NEWMADDR, &info, w, &len);
|
||||
if (error != 0)
|
||||
goto done;
|
||||
break;
|
||||
if (w->w_req && w->w_tmem) {
|
||||
struct ifma_msghdr *ifmam;
|
||||
|
||||
@@ -1815,15 +1822,14 @@ sysctl_ifmalist(int af, struct walkarg *w)
|
||||
ifmam->ifmam_flags = 0;
|
||||
ifmam->ifmam_addrs = info.rti_addrs;
|
||||
error = SYSCTL_OUT(w->w_req, w->w_tmem, len);
|
||||
if (error) {
|
||||
IF_ADDR_RUNLOCK(ifp);
|
||||
goto done;
|
||||
}
|
||||
if (error != 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
IF_ADDR_RUNLOCK(ifp);
|
||||
if (error != 0)
|
||||
break;
|
||||
}
|
||||
done:
|
||||
IFNET_RUNLOCK_NOSLEEP();
|
||||
return (error);
|
||||
}
|
||||
|
Reference in New Issue
Block a user