diff --git a/include/net/route.h b/include/net/route.h index 71e069675810..5818b43d20d0 100644 --- a/include/net/route.h +++ b/include/net/route.h @@ -72,6 +72,7 @@ struct rtable { int rt_iif; int rt_edscp; + __be32 rt_saddr; u8 rt_gw_family; /* Info on neighbour */ union { diff --git a/include/uapi/linux/rtnetlink.h b/include/uapi/linux/rtnetlink.h index d39978d583f5..e4d2ddb1a7bb 100644 --- a/include/uapi/linux/rtnetlink.h +++ b/include/uapi/linux/rtnetlink.h @@ -359,7 +359,7 @@ enum rt_class_t { /* Routing message attributes */ -enum rtattr_type_t { +enum rtattr_type_t {/* attr */ RTA_UNSPEC, RTA_DST, RTA_SRC, diff --git a/lib/nlattr.c b/lib/nlattr.c index 86029ad5ead4..edde37753389 100644 --- a/lib/nlattr.c +++ b/lib/nlattr.c @@ -597,11 +597,11 @@ static int __nla_validate_parse(const struct nlattr *head, int len, int maxtype, } if (unlikely(rem > 0)) { - pr_warn_ratelimited("netlink: %d bytes leftover after parsing attributes in process `%s'.\n", + pr_warn_ratelimited("netlink: %d bytes leftover after parsing attributes in process `%s' Q [patch, don`t return error] .\n", rem, current->comm); - NL_SET_ERR_MSG(extack, "bytes leftover after parsing attributes"); - if (validate & NL_VALIDATE_TRAILING) - return -EINVAL; + /* NL_SET_ERR_MSG(extack, " bytes leftover after parsing attributes"); */ + /* if (validate & NL_VALIDATE_TRAILING) */ + /* return -EINVAL; */ } return 0; diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c index d86bcbf99650..459ccb17c55e 100644 --- a/net/ipv4/fib_frontend.c +++ b/net/ipv4/fib_frontend.c @@ -721,7 +721,7 @@ int fib_gw_from_via(struct fib_config *cfg, struct nlattr *nla, return 0; } -static int rtm_to_fib_config(struct net *net, struct sk_buff *skb, +static int rtm_to_fib_config(struct net *net, struct sk_buff *skb, /* EEE FIB cfg */ struct nlmsghdr *nlh, struct fib_config *cfg, struct netlink_ext_ack *extack) { @@ -739,9 +739,11 @@ static int rtm_to_fib_config(struct net *net, struct sk_buff *skb, rtm = nlmsg_data(nlh); + printk("QQQ CFG validate [%d]\n", rtm->rtm_tos); if (!inet_validate_dscp(rtm->rtm_tos)) { + /* || !inet_validate_dscp(rtm->rtm_dscp) */ NL_SET_ERR_MSG(extack, - "Invalid dsfield (tos): ECN bits must be 0"); + "Invalid dsfield (tos|dscp): ECN bits must be 0"); err = -EINVAL; goto errout; } @@ -751,6 +753,7 @@ static int rtm_to_fib_config(struct net *net, struct sk_buff *skb, else cfg->fc_idscp = inet_dsfield_to_dscp(rtm->rtm_tos); + printk("QQQ CFG set [%d|%d]\n", cfg->fc_idscp, cfg->fc_edscp); cfg->fc_dst_len = rtm->rtm_dst_len; cfg->fc_table = rtm->rtm_table; cfg->fc_protocol = rtm->rtm_protocol; @@ -880,7 +883,7 @@ static int inet_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh, return err; } -static int inet_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh, +static int inet_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh, /* EEE newroute */ struct netlink_ext_ack *extack) { struct net *net = sock_net(skb->sk); @@ -888,16 +891,19 @@ static int inet_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh, struct fib_table *tb; int err; + printk("QQQ new route\n"); err = rtm_to_fib_config(net, skb, nlh, &cfg, extack); if (err < 0) goto errout; + printk("QQQ new table\n"); tb = fib_new_table(net, cfg.fc_table); if (!tb) { err = -ENOBUFS; goto errout; } + printk("QQQ new insert\n"); err = fib_table_insert(net, tb, &cfg, extack); if (!err && cfg.fc_type == RTN_LOCAL) net->ipv4.fib_has_custom_local_routes = true; diff --git a/net/ipv4/fib_rules.c b/net/ipv4/fib_rules.c index 513f475c6a53..1e3b063eb4f2 100644 --- a/net/ipv4/fib_rules.c +++ b/net/ipv4/fib_rules.c @@ -50,7 +50,7 @@ static bool fib4_rule_matchall(const struct fib_rule *rule) { struct fib4_rule *r = container_of(rule, struct fib4_rule, common); - if (r->dst_len || r->src_len || r->dscp) + if (r->dst_len || r->src_len || r->dscp) // return false; return fib_rule_matchall(rule); } @@ -186,7 +186,7 @@ INDIRECT_CALLABLE_SCOPE int fib4_rule_match(struct fib_rule *rule, ((daddr ^ r->dst) & r->dstmask)) return 0; - if (r->dscp && r->dscp != inet_dsfield_to_dscp(fl4->flowi4_tos)) + if (r->dscp && r->dscp != inet_dsfield_to_dscp(fl4->flowi4_tos)) // return 0; if (rule->ip_proto && (rule->ip_proto != fl4->flowi4_proto)) @@ -236,7 +236,7 @@ static int fib4_rule_configure(struct fib_rule *rule, struct sk_buff *skb, NL_SET_ERR_MSG(extack, "Invalid tos"); goto errout; } - rule4->dscp = inet_dsfield_to_dscp(frh->tos); + rule4->dscp = inet_dsfield_to_dscp(frh->tos); // /* split local/main if they are not already split */ err = fib_unmerge(net); @@ -320,7 +320,7 @@ static int fib4_rule_compare(struct fib_rule *rule, struct fib_rule_hdr *frh, if (frh->dst_len && (rule4->dst_len != frh->dst_len)) return 0; - if (frh->tos && inet_dscp_to_dsfield(rule4->dscp) != frh->tos) + if (frh->tos && inet_dscp_to_dsfield(rule4->dscp) != frh->tos) // return 0; #ifdef CONFIG_IP_ROUTE_CLASSID @@ -344,7 +344,7 @@ static int fib4_rule_fill(struct fib_rule *rule, struct sk_buff *skb, frh->dst_len = rule4->dst_len; frh->src_len = rule4->src_len; - frh->tos = inet_dscp_to_dsfield(rule4->dscp); + frh->tos = inet_dscp_to_dsfield(rule4->dscp);/* WWW check */ if ((rule4->dst_len && nla_put_in_addr(skb, FRA_DST, rule4->dst)) || diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c index 308c06eb770a..3d8b5613eaaf 100644 --- a/net/ipv4/fib_semantics.c +++ b/net/ipv4/fib_semantics.c @@ -1784,6 +1784,7 @@ int fib_dump_info(struct sk_buff *skb, u32 portid, u32 seq, int event, rtm->rtm_dst_len = fri->dst_len; rtm->rtm_src_len = 0; rtm->rtm_tos = inet_dscp_to_dsfield(fri->dscp); + printk("QQQ FIB_DUMP [%d|%d|%d]\n", rtm->rtm_tos, fri->dscp, fri->edscp); if (fi->fib_flags & RTM_F_DSCP) rtm->rtm_tos = inet_dscp_to_dsfield(fri->edscp); diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c index 1b8aa417d7e1..b8a0fb136188 100644 --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c @@ -1209,7 +1209,7 @@ static void fib_remove_alias(struct trie *t, struct key_vector *tp, struct key_vector *l, struct fib_alias *old); /* Caller must hold RTNL. */ -int fib_table_insert(struct net *net, struct fib_table *tb, +int fib_table_insert(struct net *net, struct fib_table *tb, /* FFF */ struct fib_config *cfg, struct netlink_ext_ack *extack) { struct trie *t = (struct trie *)tb->tb_data; @@ -1225,6 +1225,7 @@ int fib_table_insert(struct net *net, struct fib_table *tb, key = ntohl(cfg->fc_dst); + printk("QQQ new valid\n"); if (!fib_valid_key_len(key, plen, extack)) return -EINVAL; @@ -1326,7 +1327,8 @@ int fib_table_insert(struct net *net, struct fib_table *tb, goto out_free_new_fa; } } - + /* REPLACE new */ + printk("QQQ REPLACE new\n"); rtmsg_fib(RTM_NEWROUTE, htonl(key), new_fa, plen, tb->tb_id, &cfg->fc_nlinfo, nlflags); diff --git a/net/ipv4/ip_forward.c b/net/ipv4/ip_forward.c index 3fbaeee43dcb..f76d8cfae1ea 100644 --- a/net/ipv4/ip_forward.c +++ b/net/ipv4/ip_forward.c @@ -83,6 +83,11 @@ static int ip_forward_finish(struct net *net, struct sock *sk, struct sk_buff *s return dst_output(net, sk, skb); } +bool gdebug = true; +void debug (void) { + printk("debug"); +} + int ip_forward(struct sk_buff *skb) { u32 mtu; @@ -126,6 +131,7 @@ int ip_forward(struct sk_buff *skb) goto drop; } + printk("QQQ ip_forward rt\n"); rt = skb_rtable(skb); if (opt->is_strictroute && rt->rt_uses_gateway) diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 6e33a58c3a11..4dc9c455398d 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -1269,7 +1269,7 @@ static int ip_rt_bug(struct net *net, struct sock *sk, struct sk_buff *skb) * in IP options! */ -void ip_rt_get_source(u8 *addr, struct sk_buff *skb, struct rtable *rt) +void ip_rt_get_source(u8 *addr, struct sk_buff *skb, struct rtable *rt) // { __be32 src; @@ -1811,6 +1811,7 @@ static int __mkroute_input(struct sk_buff *skb, return -EINVAL; } + printk("QQQ __mkroute_input\n"); err = fib_validate_source(skb, saddr, daddr, tos, FIB_RES_OIF(*res), in_dev->dev, in_dev, &itag); if (err < 0) { @@ -1850,15 +1851,18 @@ static int __mkroute_input(struct sk_buff *skb, if (no_policy) IPCB(skb)->flags |= IPSKB_NOPOLICY; + printk("QQQ find_exception\n"); fnhe = find_exception(nhc, daddr); if (do_cache) { + /* dst = skb_dst(skb); */ + /* dst->edscp = res->edscp; */ + printk("QQQ do cache\n"); if (fnhe) rth = rcu_dereference(fnhe->fnhe_rth_input); else rth = rcu_dereference(nhc->nhc_rth_input); if (rt_cache_valid(rth)) { rth->dst.edscp = res->edscp; - printk("QQQ YAY [%d]\n", rth->dst.edscp); skb_dst_set_noref(skb, &rth->dst); goto out; } @@ -1875,6 +1879,9 @@ static int __mkroute_input(struct sk_buff *skb, RT_CACHE_STAT_INC(in_slow_tot); rth->dst.input = ip_forward; rth->dst.edscp = res->edscp; + rth->rt_edscp = res->edscp; + rth->rt_saddr = saddr; + printk("QQQ mk_route_in set dscp [%d|%pI4]\n", rth->rt_edscp, &saddr); rt_set_nexthop(rth, daddr, res, fnhe, res->fi, res->type, itag, do_cache); @@ -2340,7 +2347,7 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr, goto martian_destination; make_route: - err = ip_mkroute_input(skb, res, in_dev, daddr, saddr, tos, flkeys); + err = ip_mkroute_input(skb, res, in_dev, daddr, saddr, tos, flkeys); // out: return err; brd_input: @@ -2945,7 +2952,7 @@ struct rtable *ip_route_output_tunnel(struct sk_buff *skb, EXPORT_SYMBOL_GPL(ip_route_output_tunnel); /* called with rcu_read_lock held */ -static int rt_fill_info(struct net *net, __be32 dst, __be32 src, +static int rt_fill_info(struct net *net, __be32 dst, __be32 src, /* EEE Fill */ struct rtable *rt, u32 table_id, struct flowi4 *fl4, struct sk_buff *skb, u32 portid, u32 seq, unsigned int flags) @@ -3287,7 +3294,7 @@ static int inet_rtm_valid_getroute_req(struct sk_buff *skb, return 0; } -static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, +static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, /* EEE get route */ struct netlink_ext_ack *extack) { struct net *net = sock_net(in_skb->sk); diff --git a/net/netfilter/xt_DSCP.c b/net/netfilter/xt_DSCP.c index eababc354ff1..d87d35eca1e6 100644 --- a/net/netfilter/xt_DSCP.c +++ b/net/netfilter/xt_DSCP.c @@ -25,7 +25,7 @@ MODULE_ALIAS("ipt_TOS"); MODULE_ALIAS("ip6t_TOS"); static unsigned int -dscp_tg(struct sk_buff *skb, const struct xt_action_param *par) +dscp_tg(struct sk_buff *skb, const struct xt_action_param *par)/* WWW */ { const struct xt_DSCP_info *dinfo = par->targinfo; u_int8_t dscp = ipv4_get_dsfield(ip_hdr(skb)) >> XT_DSCP_SHIFT; @@ -34,7 +34,7 @@ dscp_tg(struct sk_buff *skb, const struct xt_action_param *par) if (skb_ensure_writable(skb, sizeof(struct iphdr))) return NF_DROP; - ipv4_change_dsfield(ip_hdr(skb), + ipv4_change_dsfield(ip_hdr(skb),/* WWW */ (__force __u8)(~XT_DSCP_MASK), dinfo->dscp << XT_DSCP_SHIFT); diff --git a/scripts/Makefile.package b/scripts/Makefile.package index 77b612183c08..8528207a5c01 100644 --- a/scripts/Makefile.package +++ b/scripts/Makefile.package @@ -75,7 +75,7 @@ deb-pkg: $(call cmd,src_tar,$(KDEB_SOURCENAME)) origversion=$$(dpkg-parsechangelog -SVersion |sed 's/-[^-]*$$//');\ mv $(KDEB_SOURCENAME).tar.gz ../$(KDEB_SOURCENAME)_$${origversion}.orig.tar.gz - +dpkg-buildpackage -r$(KBUILD_PKG_ROOTCMD) -a$$(cat debian/arch) $(DPKG_FLAGS) -i.git -us -uc + dpkg-buildpackage -r$(KBUILD_PKG_ROOTCMD) -a$$(cat debian/arch) $(DPKG_FLAGS) -i.git -us -uc PHONY += bindeb-pkg bindeb-pkg: diff --git a/scripts/gdb/vmlinux-gdb.py b/scripts/gdb/vmlinux-gdb.py old mode 100644 new mode 100755 diff --git a/scripts/tags.sh b/scripts/tags.sh index 01fab3d4f90b..a2b8a345532e 100755 --- a/scripts/tags.sh +++ b/scripts/tags.sh @@ -125,7 +125,7 @@ all_kconfigs() docscope() { - (echo \-k; echo \-q; all_target_sources) > cscope.files + (echo \-k; echo \-q; all_target_sources) | grep -v debian > cscope.files cscope -b -f cscope.out }