MCPcopy Index your code
hub / github.com/F-Stack/f-stack / ff_veth_setaddr6

Function ff_veth_setaddr6

lib/ff_veth.c:707–743  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

705
706#ifdef INET6
707static int
708ff_veth_setaddr6(struct ff_veth_softc *sc, const char *if_name)
709{
710 struct in6_aliasreq ifr6;
711 bzero(&ifr6, sizeof(ifr6));
712
713 if (if_name) {
714 strcpy(ifr6.ifra_name, if_name);
715 } else {
716 strcpy(ifr6.ifra_name, sc->ifp->if_dname);
717 }
718
719 ifr6.ifra_addr.sin6_len = sizeof ifr6.ifra_addr;
720 ifr6.ifra_addr.sin6_family = AF_INET6;
721 ifr6.ifra_addr.sin6_addr = sc->ip6;
722
723 ifr6.ifra_prefixmask.sin6_len = sizeof ifr6.ifra_prefixmask;
724 memset(&ifr6.ifra_prefixmask.sin6_addr, 0xff, sc->prefix_length / 8);
725 uint8_t mask_size_mod = sc->prefix_length % 8;
726 if (mask_size_mod)
727 {
728 ifr6.ifra_prefixmask.sin6_addr.__u6_addr.__u6_addr8[sc->prefix_length / 8] = \
729 ((1 << mask_size_mod) - 1) << (8 - mask_size_mod);
730 }
731
732 ifr6.ifra_lifetime.ia6t_pltime = ifr6.ifra_lifetime.ia6t_vltime = ND6_INFINITE_LIFETIME;
733
734 ifr6.ifra_flags |= IN6_IFF_AUTOCONF;
735
736 struct socket *so = NULL;
737 socreate(AF_INET6, &so, SOCK_DGRAM, 0, curthread->td_ucred, curthread);
738 int ret = ifioctl(so, SIOCAIFADDR_IN6, (caddr_t)&ifr6, curthread);
739
740 soclose(so);
741
742 return ret;
743}
744
745static int
746ff_veth_set_gateway6(struct ff_veth_softc *sc, uint32_t fib_num)

Callers 1

ff_veth_setup_interfaceFunction · 0.85

Calls 5

bzeroFunction · 0.85
memsetFunction · 0.85
socreateFunction · 0.85
ifioctlFunction · 0.85
socloseFunction · 0.85

Tested by

no test coverage detected