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

Function ff_veth_setvaddr6

lib/ff_veth.c:772–820  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

770}
771
772static int
773ff_veth_setvaddr6(struct ff_veth_softc *sc, struct ff_port_cfg *cfg, const char *if_name)
774{
775 struct in6_aliasreq ifr6;
776 bzero(&ifr6, sizeof(ifr6));
777
778 if (if_name) {
779 strlcpy(ifr6.ifra_name, if_name, IFNAMSIZ);
780 } else if (cfg->vip_ifname) {
781 strlcpy(ifr6.ifra_name, cfg->vip_ifname, IFNAMSIZ);
782 } else {
783 strlcpy(ifr6.ifra_name, sc->ifp->if_dname, IFNAMSIZ);
784 }
785
786 ifr6.ifra_addr.sin6_len = sizeof ifr6.ifra_addr;
787 ifr6.ifra_addr.sin6_family = AF_INET6;
788
789 ifr6.ifra_prefixmask.sin6_len = sizeof ifr6.ifra_prefixmask;
790 memset(&ifr6.ifra_prefixmask.sin6_addr, 0xff, sc->prefix_length / 8);
791 uint8_t mask_size_mod = sc->prefix_length % 8;
792 if (mask_size_mod)
793 {
794 ifr6.ifra_prefixmask.sin6_addr.__u6_addr.__u6_addr8[sc->prefix_length / 8] = \
795 ((1 << mask_size_mod) - 1) << (8 - mask_size_mod);
796 }
797
798 ifr6.ifra_lifetime.ia6t_pltime = ifr6.ifra_lifetime.ia6t_vltime = ND6_INFINITE_LIFETIME;
799
800 ifr6.ifra_flags |= IN6_IFF_AUTOCONF;
801
802 struct socket *so = NULL;
803 socreate(AF_INET6, &so, SOCK_DGRAM, 0, curthread->td_ucred, curthread);
804
805 int i, ret;
806 for (i = 0; i < sc->nb_vip6; ++i) {
807 ifr6.ifra_addr.sin6_addr = sc->vip6[i];
808
809 ret = ifioctl(so, SIOCAIFADDR_IN6, (caddr_t)&ifr6, curthread);
810 if (ret < 0) {
811 printf("ff_veth_setvaddr6 ifioctl SIOCAIFADDR error\n");
812 goto done;
813 }
814 }
815
816done:
817 soclose(so);
818
819 return ret;
820}
821#endif /* INET6 */
822
823static int

Callers 1

ff_veth_setup_interfaceFunction · 0.85

Calls 7

bzeroFunction · 0.85
memsetFunction · 0.85
socreateFunction · 0.85
ifioctlFunction · 0.85
socloseFunction · 0.85
printfFunction · 0.70
strlcpyFunction · 0.50

Tested by

no test coverage detected