Merge branch 'master' into net-next
This commit is contained in:
commit
69be46c562
|
|
@ -97,15 +97,25 @@ int print_mroute(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
|
||||||
if (filter.af && filter.af != r->rtm_family)
|
if (filter.af && filter.af != r->rtm_family)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (tb[RTA_DST] &&
|
if (tb[RTA_DST] && filter.mdst.bitlen > 0) {
|
||||||
filter.mdst.bitlen > 0 &&
|
inet_prefix dst;
|
||||||
inet_addr_match(RTA_DATA(tb[RTA_DST]), &filter.mdst, filter.mdst.bitlen))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (tb[RTA_SRC] &&
|
memset(&dst, 0, sizeof(dst));
|
||||||
filter.msrc.bitlen > 0 &&
|
dst.family = r->rtm_family;
|
||||||
inet_addr_match(RTA_DATA(tb[RTA_SRC]), &filter.msrc, filter.msrc.bitlen))
|
memcpy(&dst.data, RTA_DATA(tb[RTA_DST]), RTA_PAYLOAD(tb[RTA_DST]));
|
||||||
return 0;
|
if (inet_addr_match(&dst, &filter.mdst, filter.mdst.bitlen))
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tb[RTA_SRC] && filter.msrc.bitlen > 0) {
|
||||||
|
inet_prefix src;
|
||||||
|
|
||||||
|
memset(&src, 0, sizeof(src));
|
||||||
|
src.family = r->rtm_family;
|
||||||
|
memcpy(&src.data, RTA_DATA(tb[RTA_SRC]), RTA_PAYLOAD(tb[RTA_SRC]));
|
||||||
|
if (inet_addr_match(&src, &filter.msrc, filter.msrc.bitlen))
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
family = r->rtm_family == RTNL_FAMILY_IPMR ? AF_INET : AF_INET6;
|
family = r->rtm_family == RTNL_FAMILY_IPMR ? AF_INET : AF_INET6;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -167,10 +167,14 @@ static int parse_args(int argc, char **argv, int cmd, struct ip_tunnel_parm *p)
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (strcmp(*argv, "any"))
|
if (strcmp(*argv, "any"))
|
||||||
p->iph.daddr = get_addr32(*argv);
|
p->iph.daddr = get_addr32(*argv);
|
||||||
|
else
|
||||||
|
p->iph.daddr = htonl(INADDR_ANY);
|
||||||
} else if (strcmp(*argv, "local") == 0) {
|
} else if (strcmp(*argv, "local") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (strcmp(*argv, "any"))
|
if (strcmp(*argv, "any"))
|
||||||
p->iph.saddr = get_addr32(*argv);
|
p->iph.saddr = get_addr32(*argv);
|
||||||
|
else
|
||||||
|
p->iph.saddr = htonl(INADDR_ANY);
|
||||||
} else if (strcmp(*argv, "dev") == 0) {
|
} else if (strcmp(*argv, "dev") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
strncpy(medium, *argv, IFNAMSIZ-1);
|
strncpy(medium, *argv, IFNAMSIZ-1);
|
||||||
|
|
|
||||||
|
|
@ -1085,7 +1085,7 @@ static int run_ssfilter(struct ssfilter *f, struct sockstat *s)
|
||||||
strspn(p+1, "0123456789abcdef") == 5);
|
strspn(p+1, "0123456789abcdef") == 5);
|
||||||
}
|
}
|
||||||
if (s->local.family == AF_PACKET)
|
if (s->local.family == AF_PACKET)
|
||||||
return s->lport == 0 && s->local.data == 0;
|
return s->lport == 0 && s->local.data[0] == 0;
|
||||||
if (s->local.family == AF_NETLINK)
|
if (s->local.family == AF_NETLINK)
|
||||||
return s->lport < 0;
|
return s->lport < 0;
|
||||||
|
|
||||||
|
|
|
||||||
32
tc/m_pedit.c
32
tc/m_pedit.c
|
|
@ -160,17 +160,9 @@ pack_key32(__u32 retain,struct tc_pedit_sel *sel,struct tc_pedit_key *tkey)
|
||||||
int
|
int
|
||||||
pack_key16(__u32 retain,struct tc_pedit_sel *sel,struct tc_pedit_key *tkey)
|
pack_key16(__u32 retain,struct tc_pedit_sel *sel,struct tc_pedit_key *tkey)
|
||||||
{
|
{
|
||||||
int ind = 0, stride = 0;
|
int ind, stride;
|
||||||
__u32 m[4] = {0xFFFF0000,0xFF0000FF,0x0000FFFF};
|
__u32 m[4] = {0xFFFF0000,0xFF0000FF,0x0000FFFF};
|
||||||
|
|
||||||
if (0 > tkey->off) {
|
|
||||||
ind = tkey->off + 1;
|
|
||||||
if (0 > ind)
|
|
||||||
ind = -1*ind;
|
|
||||||
} else {
|
|
||||||
ind = tkey->off;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tkey->val > 0xFFFF || tkey->mask > 0xFFFF) {
|
if (tkey->val > 0xFFFF || tkey->mask > 0xFFFF) {
|
||||||
fprintf(stderr, "pack_key16 bad value\n");
|
fprintf(stderr, "pack_key16 bad value\n");
|
||||||
return -1;
|
return -1;
|
||||||
|
|
@ -178,18 +170,16 @@ pack_key16(__u32 retain,struct tc_pedit_sel *sel,struct tc_pedit_key *tkey)
|
||||||
|
|
||||||
ind = tkey->off & 3;
|
ind = tkey->off & 3;
|
||||||
|
|
||||||
if (0 > ind || 2 < ind) {
|
if (ind == 3) {
|
||||||
fprintf(stderr, "pack_key16 bad index value %d\n",ind);
|
fprintf(stderr, "pack_key16 bad index value %d\n",ind);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
stride = 8 * ind;
|
stride = 8 * ind;
|
||||||
tkey->val = htons(tkey->val);
|
tkey->val = htons(tkey->val);
|
||||||
if (stride > 0) {
|
tkey->val <<= stride;
|
||||||
tkey->val <<= stride;
|
tkey->mask <<= stride;
|
||||||
tkey->mask <<= stride;
|
retain <<= stride;
|
||||||
retain <<= stride;
|
|
||||||
}
|
|
||||||
tkey->mask = retain|m[ind];
|
tkey->mask = retain|m[ind];
|
||||||
|
|
||||||
tkey->off &= ~3;
|
tkey->off &= ~3;
|
||||||
|
|
@ -203,28 +193,22 @@ pack_key16(__u32 retain,struct tc_pedit_sel *sel,struct tc_pedit_key *tkey)
|
||||||
int
|
int
|
||||||
pack_key8(__u32 retain,struct tc_pedit_sel *sel,struct tc_pedit_key *tkey)
|
pack_key8(__u32 retain,struct tc_pedit_sel *sel,struct tc_pedit_key *tkey)
|
||||||
{
|
{
|
||||||
int ind = 0, stride = 0;
|
int ind, stride;
|
||||||
__u32 m[4] = {0xFFFFFF00,0xFFFF00FF,0xFF00FFFF,0x00FFFFFF};
|
__u32 m[4] = {0xFFFFFF00,0xFFFF00FF,0xFF00FFFF,0x00FFFFFF};
|
||||||
|
|
||||||
if (0 > tkey->off) {
|
|
||||||
ind = tkey->off + 1;
|
|
||||||
if (0 > ind)
|
|
||||||
ind = -1*ind;
|
|
||||||
} else {
|
|
||||||
ind = tkey->off;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tkey->val > 0xFF || tkey->mask > 0xFF) {
|
if (tkey->val > 0xFF || tkey->mask > 0xFF) {
|
||||||
fprintf(stderr, "pack_key8 bad value (val %x mask %x\n", tkey->val, tkey->mask);
|
fprintf(stderr, "pack_key8 bad value (val %x mask %x\n", tkey->val, tkey->mask);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ind = tkey->off & 3;
|
ind = tkey->off & 3;
|
||||||
|
|
||||||
stride = 8 * ind;
|
stride = 8 * ind;
|
||||||
tkey->val <<= stride;
|
tkey->val <<= stride;
|
||||||
tkey->mask <<= stride;
|
tkey->mask <<= stride;
|
||||||
retain <<= stride;
|
retain <<= stride;
|
||||||
tkey->mask = retain|m[ind];
|
tkey->mask = retain|m[ind];
|
||||||
|
|
||||||
tkey->off &= ~3;
|
tkey->off &= ~3;
|
||||||
|
|
||||||
if (pedit_debug)
|
if (pedit_debug)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue