Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet/in_gif.c
Show First 20 Lines • Show All 190 Lines • ▼ Show 20 Lines | in_gif_setopts(struct gif_softc *sc, u_int options) | ||||
} | } | ||||
return (0); | return (0); | ||||
} | } | ||||
int | int | ||||
in_gif_ioctl(struct gif_softc *sc, u_long cmd, caddr_t data) | in_gif_ioctl(struct gif_softc *sc, u_long cmd, caddr_t data) | ||||
{ | { | ||||
struct ifreq *ifr = (struct ifreq *)data; | struct ifreq *ifr = (struct ifreq *)data; | ||||
struct epoch_tracker et; | |||||
struct sockaddr_in *dst, *src; | struct sockaddr_in *dst, *src; | ||||
struct ip *ip; | struct ip *ip; | ||||
int error; | int error; | ||||
/* NOTE: we are protected with gif_ioctl_sx lock */ | /* NOTE: we are protected with gif_ioctl_sx lock */ | ||||
error = EINVAL; | error = EINVAL; | ||||
switch (cmd) { | switch (cmd) { | ||||
case SIOCSIFPHYADDR: | case SIOCSIFPHYADDR: | ||||
Show All 33 Lines | if (sc->gif_family != 0) { | ||||
CK_LIST_REMOVE(sc, chain); | CK_LIST_REMOVE(sc, chain); | ||||
GIF_WAIT(); | GIF_WAIT(); | ||||
free(sc->gif_hdr, M_GIF); | free(sc->gif_hdr, M_GIF); | ||||
/* XXX: should we notify about link state change? */ | /* XXX: should we notify about link state change? */ | ||||
} | } | ||||
sc->gif_family = AF_INET; | sc->gif_family = AF_INET; | ||||
sc->gif_iphdr = ip; | sc->gif_iphdr = ip; | ||||
in_gif_attach(sc); | in_gif_attach(sc); | ||||
NET_EPOCH_ENTER(et); | |||||
in_gif_set_running(sc); | in_gif_set_running(sc); | ||||
NET_EPOCH_EXIT(et); | |||||
break; | break; | ||||
case SIOCGIFPSRCADDR: | case SIOCGIFPSRCADDR: | ||||
case SIOCGIFPDSTADDR: | case SIOCGIFPDSTADDR: | ||||
if (sc->gif_family != AF_INET) { | if (sc->gif_family != AF_INET) { | ||||
error = EADDRNOTAVAIL; | error = EADDRNOTAVAIL; | ||||
break; | break; | ||||
} | } | ||||
src = (struct sockaddr_in *)&ifr->ifr_addr; | src = (struct sockaddr_in *)&ifr->ifr_addr; | ||||
▲ Show 20 Lines • Show All 204 Lines • Show Last 20 Lines |