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

Function stf_ioctl

freebsd/net/if_stf.c:703–762  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

701}
702
703static int
704stf_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
705{
706 struct ifaddr *ifa;
707 struct ifreq *ifr;
708 struct sockaddr_in6 *sin6;
709 struct in_addr addr;
710 int error, mtu;
711
712 error = 0;
713 switch (cmd) {
714 case SIOCSIFADDR:
715 ifa = (struct ifaddr *)data;
716 if (ifa == NULL || ifa->ifa_addr->sa_family != AF_INET6) {
717 error = EAFNOSUPPORT;
718 break;
719 }
720 sin6 = (struct sockaddr_in6 *)ifa->ifa_addr;
721 if (!IN6_IS_ADDR_6TO4(&sin6->sin6_addr)) {
722 error = EINVAL;
723 break;
724 }
725 bcopy(GET_V4(&sin6->sin6_addr), &addr, sizeof(addr));
726 if (isrfc1918addr(&addr)) {
727 error = EINVAL;
728 break;
729 }
730
731 ifp->if_flags |= IFF_UP;
732 ifp->if_drv_flags |= IFF_DRV_RUNNING;
733 break;
734
735 case SIOCADDMULTI:
736 case SIOCDELMULTI:
737 ifr = (struct ifreq *)data;
738 if (ifr && ifr->ifr_addr.sa_family == AF_INET6)
739 ;
740 else
741 error = EAFNOSUPPORT;
742 break;
743
744 case SIOCGIFMTU:
745 break;
746
747 case SIOCSIFMTU:
748 ifr = (struct ifreq *)data;
749 mtu = ifr->ifr_mtu;
750 /* RFC 4213 3.2 ideal world MTU */
751 if (mtu < IPV6_MINMTU || mtu > IF_MAXMTU - 20)
752 return (EINVAL);
753 ifp->if_mtu = mtu;
754 break;
755
756 default:
757 error = EINVAL;
758 break;
759 }
760

Callers

nothing calls this directly

Calls 1

isrfc1918addrFunction · 0.85

Tested by

no test coverage detected