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

Function prefixlen

tools/route/route.c:1420–1473  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1418}
1419
1420static int
1421prefixlen(const char *str)
1422{
1423 int len = atoi(str), q, r;
1424 int max;
1425 char *p;
1426
1427 rtm_addrs |= RTA_NETMASK;
1428 switch (af) {
1429#ifdef INET6
1430 case AF_INET6:
1431 {
1432 struct sockaddr_in6 *sin6 =
1433 (struct sockaddr_in6 *)&so[RTAX_NETMASK];
1434
1435 max = 128;
1436 p = (char *)&sin6->sin6_addr;
1437 sin6->sin6_family = AF_INET6;
1438 sin6->sin6_len = sizeof(*sin6);
1439 break;
1440 }
1441#endif
1442#ifdef INET
1443 case AF_INET:
1444 {
1445 struct sockaddr_in *sin =
1446 (struct sockaddr_in *)&so[RTAX_NETMASK];
1447
1448 max = 32;
1449 p = (char *)&sin->sin_addr;
1450 sin->sin_family = AF_INET;
1451 sin->sin_len = sizeof(*sin);
1452 break;
1453 }
1454#endif
1455 default:
1456 errx(EX_OSERR, "prefixlen not supported in this af");
1457 }
1458
1459 if (len < 0 || max < len)
1460 errx(EX_USAGE, "%s: invalid prefixlen", str);
1461
1462 q = len >> 3;
1463 r = len & 7;
1464 memset((void *)p, 0, max / 8);
1465 if (q > 0)
1466 memset((void *)p, 0xff, q);
1467 if (r > 0)
1468 *((u_char *)p + q) = (0xff00 >> r) & 0xff;
1469 if (len == max)
1470 return (-1);
1471 else
1472 return (len);
1473}
1474
1475#ifndef FSTACK
1476static void

Callers 2

newrouteFunction · 0.85
inet6_makenetandmaskFunction · 0.85

Calls 1

memsetFunction · 0.85

Tested by

no test coverage detected