On 12-12-16 03:41 PM, Jamal Hadi Salim wrote:
There is an "intermediate solution" from Hasan which doesnt require the kernel change. It changes the kernel endpoint to "ipt". I am conflicted because it is a quick hack while otoh forcing people to upgrade kernel is a usability issue.
Attached. Author is Hasan - I didnt sign it because i am looking for feedback and i find it distasteful but it solves the problem. This is needed until we have a proper fix in the kernel propagated. Once that kernel change is ubiquitous this change is noise and a maintanance pain. I am making it hard to even turn it on (i.e someone knowledgeable will have to compile with CONFIG_XT_HACK) cheers, jamal
diff --git a/tc/m_action.c b/tc/m_action.c index 1fe2431..fa9a7c8 100644 --- a/tc/m_action.c +++ b/tc/m_action.c @@ -209,10 +209,17 @@ done0: tail = NLMSG_TAIL(n); addattr_l(n, MAX_MSG, ++prio, NULL, 0); + /*XXX: hack to work around old kernels, newer xtables */ +#ifdef CONFIG_XT_HACK + if (strncmp(k,"xt",2)==0) + addattr_l(n, MAX_MSG, TCA_ACT_KIND, "ipt" , strlen("ipt") + 1); + else + addattr_l(n, MAX_MSG, TCA_ACT_KIND, k, strlen(k) + 1); +#else addattr_l(n, MAX_MSG, TCA_ACT_KIND, k, strlen(k) + 1); +#endif ret = a->parse_aopt(a,&argc, &argv, TCA_ACT_OPTIONS, n); - if (ret < 0) { fprintf(stderr,"bad action parsing\n"); goto bad_val; @@ -259,7 +266,15 @@ tc_print_one_action(FILE * f, struct rtattr *arg) } + /*XXX: hack to work around old kernels, newer xtables */ +#ifdef CONFIG_XT_HACK + if (strcmp(RTA_DATA(tb[TCA_ACT_KIND]), "ipt")==0) + a = get_action_kind("xt"); + else + a = get_action_kind(RTA_DATA(tb[TCA_ACT_KIND])); +#else a = get_action_kind(RTA_DATA(tb[TCA_ACT_KIND])); +#endif if (NULL == a) return err;