404d15411e
case: <driver>_ioctl(ifp, SIOCSIFADDR, struct ifreq *) where it should be calling: <driver>_ioctl(ifp, SIOCSIFADDR, struct ifaddr *) and "Bad Things Happen (TM)" Returning an error is good enough because none of the drivers handle INET6. The problem here is that handling SIOCSIFADDR is a kludge. The ioctl gets passed a struct ifreq * from userland, but then in the control routines SIOCSIFADDR is handled "specially", and we call: ifp->if_ioctl(ifp, SIOCSIFADDR, struct ifaddr *) directly with the ifaddr we computed for that interface. It would be nice if we called the ioctl routine if the original struct ifreq, and computed the ifaddr, or passed it directly. This way all the ioctls would be treated the same way, and we would not have the problem of pointer overloading. |
||
---|---|---|
.. | ||
ah_aesxcbcmac.c | ||
ah_aesxcbcmac.h | ||
ah_core.c | ||
ah_input.c | ||
ah_output.c | ||
ah.h | ||
dest6.c | ||
esp_aesctr.c | ||
esp_aesctr.h | ||
esp_core.c | ||
esp_input.c | ||
esp_output.c | ||
esp_rijndael.c | ||
esp_rijndael.h | ||
esp.h | ||
files.ipsec | ||
files.netinet6 | ||
frag6.c | ||
icmp6.c | ||
in6_cksum.c | ||
in6_gif.c | ||
in6_gif.h | ||
in6_ifattach.c | ||
in6_ifattach.h | ||
in6_pcb.c | ||
in6_pcb.h | ||
in6_proto.c | ||
in6_src.c | ||
in6_var.h | ||
in6.c | ||
in6.h | ||
ip6_forward.c | ||
ip6_id.c | ||
ip6_input.c | ||
ip6_mroute.c | ||
ip6_mroute.h | ||
ip6_output.c | ||
ip6_var.h | ||
ip6protosw.h | ||
ipcomp_core.c | ||
ipcomp_input.c | ||
ipcomp_output.c | ||
ipcomp.h | ||
ipsec.c | ||
ipsec.h | ||
Makefile | ||
mld6_var.h | ||
mld6.c | ||
nd6_nbr.c | ||
nd6_rtr.c | ||
nd6.c | ||
nd6.h | ||
pim6_var.h | ||
pim6.h | ||
raw_ip6.c | ||
raw_ip6.h | ||
route6.c | ||
scope6_var.h | ||
scope6.c | ||
udp6_output.c | ||
udp6_usrreq.c | ||
udp6_var.h | ||
udp6.h |