Changeset View
Changeset View
Standalone View
Standalone View
sbin/ipfw/dummynet.c
Show First 20 Lines • Show All 50 Lines • ▼ Show 20 Lines | |||||
#include <arpa/inet.h> /* inet_ntoa */ | #include <arpa/inet.h> /* inet_ntoa */ | ||||
static struct _s_x dummynet_params[] = { | static struct _s_x dummynet_params[] = { | ||||
{ "plr", TOK_PLR }, | { "plr", TOK_PLR }, | ||||
{ "noerror", TOK_NOERROR }, | { "noerror", TOK_NOERROR }, | ||||
{ "buckets", TOK_BUCKETS }, | { "buckets", TOK_BUCKETS }, | ||||
{ "dst-ip", TOK_DSTIP }, | { "dst-ip", TOK_DSTIP }, | ||||
{ "dst-ip4", TOK_DSTIP4 }, | |||||
{ "dst-ipv4", TOK_DSTIP4 }, | |||||
{ "src-ip", TOK_SRCIP }, | { "src-ip", TOK_SRCIP }, | ||||
{ "src-ip4", TOK_SRCIP4 }, | |||||
{ "src-ipv4", TOK_SRCIP4 }, | |||||
{ "dst-port", TOK_DSTPORT }, | { "dst-port", TOK_DSTPORT }, | ||||
{ "src-port", TOK_SRCPORT }, | { "src-port", TOK_SRCPORT }, | ||||
{ "proto", TOK_PROTO }, | { "proto", TOK_PROTO }, | ||||
{ "weight", TOK_WEIGHT }, | { "weight", TOK_WEIGHT }, | ||||
{ "lmax", TOK_LMAX }, | { "lmax", TOK_LMAX }, | ||||
{ "maxlen", TOK_LMAX }, | { "maxlen", TOK_LMAX }, | ||||
{ "all", TOK_ALL }, | { "all", TOK_ALL }, | ||||
{ "mask", TOK_MASK }, /* alias for both */ | { "mask", TOK_MASK }, /* alias for both */ | ||||
▲ Show 20 Lines • Show All 1,387 Lines • ▼ Show 20 Lines | case TOK_MASK: | ||||
end = NULL; | end = NULL; | ||||
while (ac >= 1) { | while (ac >= 1) { | ||||
uint32_t *p32 = NULL; | uint32_t *p32 = NULL; | ||||
uint16_t *p16 = NULL; | uint16_t *p16 = NULL; | ||||
uint32_t *p20 = NULL; | uint32_t *p20 = NULL; | ||||
struct in6_addr *pa6 = NULL; | struct in6_addr *pa6 = NULL; | ||||
uint32_t a; | uint32_t a; | ||||
char *s = NULL; | |||||
tok = match_token(dummynet_params, *av); | tok = match_token(dummynet_params, *av); | ||||
s = strchr(*av, ':'); | |||||
ac--; av++; | ac--; av++; | ||||
switch(tok) { | switch(tok) { | ||||
case TOK_ALL: | case TOK_ALL: | ||||
/* | /* | ||||
* special case, all bits significant | * special case, all bits significant | ||||
* except 'extra' (the queue number) | * except 'extra' (the queue number) | ||||
*/ | */ | ||||
mask->dst_ip = ~0; | mask->dst_ip = ~0; | ||||
mask->src_ip = ~0; | mask->src_ip = ~0; | ||||
mask->dst_port = ~0; | mask->dst_port = ~0; | ||||
mask->src_port = ~0; | mask->src_port = ~0; | ||||
mask->proto = ~0; | mask->proto = ~0; | ||||
n2mask(&mask->dst_ip6, 128); | n2mask(&mask->dst_ip6, 128); | ||||
n2mask(&mask->src_ip6, 128); | n2mask(&mask->src_ip6, 128); | ||||
mask->flow_id6 = ~0; | mask->flow_id6 = ~0; | ||||
*flags |= DN_HAVE_MASK; | *flags |= DN_HAVE_MASK; | ||||
goto end_mask; | goto end_mask; | ||||
case TOK_QUEUE: | case TOK_QUEUE: | ||||
mask->extra = ~0; | mask->extra = ~0; | ||||
*flags |= DN_HAVE_MASK; | *flags |= DN_HAVE_MASK; | ||||
goto end_mask; | goto end_mask; | ||||
case TOK_DSTIP: | case TOK_DSTIP: | ||||
mask->addr_type = 4; | mask->addr_type = s ? 6 : 4; | ||||
if (s) | |||||
pa6 = &mask->dst_ip6; | |||||
else | |||||
p32 = &mask->dst_ip; | p32 = &mask->dst_ip; | ||||
break; | break; | ||||
case TOK_SRCIP: | case TOK_SRCIP: | ||||
mask->addr_type = s ? 6 : 4; | |||||
if (s) | |||||
pa6 = &mask->src_ip6; | |||||
else | |||||
p32 = &mask->src_ip; | |||||
break; | |||||
case TOK_DSTIP4: | |||||
mask->addr_type = 4; | |||||
p32 = &mask->dst_ip; | |||||
break; | |||||
case TOK_SRCIP4: | |||||
mask->addr_type = 4; | mask->addr_type = 4; | ||||
p32 = &mask->src_ip; | p32 = &mask->src_ip; | ||||
break; | break; | ||||
case TOK_DSTIP6: | case TOK_DSTIP6: | ||||
mask->addr_type = 6; | mask->addr_type = 6; | ||||
pa6 = &mask->dst_ip6; | pa6 = &mask->dst_ip6; | ||||
break; | break; | ||||
▲ Show 20 Lines • Show All 494 Lines • Show Last 20 Lines |