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

Function ff_veth_setvaddr

lib/ff_veth.c:504–550  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

502}
503
504static int
505ff_veth_setvaddr(struct ff_veth_softc *sc, struct ff_port_cfg *cfg, const char *if_name)
506{
507 struct in_aliasreq req;
508 bzero(&req, sizeof req);
509
510 if (if_name) {
511 strlcpy(req.ifra_name, if_name, IFNAMSIZ);
512 } else if (cfg->vip_ifname) {
513 strlcpy(req.ifra_name, cfg->vip_ifname, IFNAMSIZ);
514 } else {
515 strlcpy(req.ifra_name, sc->ifp->if_dname, IFNAMSIZ);
516 }
517
518 struct sockaddr_in sa;
519 bzero(&sa, sizeof(sa));
520 sa.sin_len = sizeof(sa);
521 sa.sin_family = AF_INET;
522
523 int i, ret;
524 struct socket *so = NULL;
525 socreate(AF_INET, &so, SOCK_DGRAM, 0, curthread->td_ucred, curthread);
526
527 for (i = 0; i < sc->nb_vip; ++i) {
528 sa.sin_addr.s_addr = sc->vip[i];
529 bcopy(&sa, &req.ifra_addr, sizeof(sa));
530
531 // Only support '255.255.255.255' netmask now
532 sa.sin_addr.s_addr = 0xFFFFFFFF;
533 bcopy(&sa, &req.ifra_mask, sizeof(sa));
534
535 // Only support 'x.x.x.x' broadaddr now
536 sa.sin_addr.s_addr = sc->vip[i] /*| 0xFF000000*/;
537 bcopy(&sa, &req.ifra_broadaddr, sizeof(sa));
538
539 ret = ifioctl(so, SIOCAIFADDR, (caddr_t)&req, curthread);
540 if (ret < 0) {
541 printf("ff_veth_setvaddr ifioctl SIOCAIFADDR error\n");
542 goto done;
543 }
544 }
545
546done:
547 soclose(so);
548
549 return ret;
550}
551
552#ifdef FF_IPFW
553/*

Callers 1

ff_veth_setup_interfaceFunction · 0.85

Calls 6

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

Tested by

no test coverage detected