Changeset 32695


Ignore:
Timestamp:
Jul 14, 2017, 4:31:51 PM (6 days ago)
Author:
brainslayer
Message:

merge latest qca shortcut fixes

Location:
src/linux/universal
Files:
29 edited

Legend:

Unmodified
Added
Removed
  • src/linux/universal/linux-3.10/include/net/netfilter/nf_conntrack_extend.h

    r26996 r32695  
    3030        NF_CT_EXT_RTCACHE,
    3131#endif
     32#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     33        NF_CT_EXT_DSCPREMARK,
     34#endif
    3235        NF_CT_EXT_CUSTOM,
    3336        NF_CT_EXT_NUM=NF_CT_EXT_CUSTOM+CONFIG_NF_CONNTRACK_CUSTOM,
     
    4346#define NF_CT_EXT_LABELS_TYPE struct nf_conn_labels
    4447#define NF_CT_EXT_RTCACHE_TYPE struct nf_conn_rtcache
     48#define NF_CT_EXT_DSCPREMARK_TYPE struct nf_ct_dscpremark_ext
    4549
    4650/* Extensions: optional stuff which isn't permanently in struct. */
  • src/linux/universal/linux-3.10/net/netfilter/Kconfig

    r26996 r32695  
    135135
    136136          If unsure, say `N'.
     137
     138config NF_CONNTRACK_DSCPREMARK_EXT
     139        bool  'Connection tracking extension for dscp remark target'
     140        depends on NETFILTER_ADVANCED
     141        help
     142          This option enables support for connection tracking extension
     143          for dscp remark.
    137144
    138145config NF_CONNTRACK_TIMESTAMP
  • src/linux/universal/linux-3.10/net/netfilter/Makefile

    r25595 r32695  
    66nf_conntrack-$(CONFIG_NF_CONNTRACK_EVENTS) += nf_conntrack_ecache.o
    77nf_conntrack-$(CONFIG_NF_CONNTRACK_LABELS) += nf_conntrack_labels.o
     8nf_conntrack-$(CONFIG_NF_CONNTRACK_DSCPREMARK_EXT) += nf_conntrack_dscpremark_ext.o
    89
    910obj-$(CONFIG_NETFILTER) = netfilter.o
  • src/linux/universal/linux-3.10/net/netfilter/nf_conntrack_core.c

    r32623 r32695  
    1 /* Connection state tracking for netfilter.  This is separated from,
     1A/* Connection state tracking for netfilter.  This is separated from,
    22   but required by, the NAT layer; it can also be used by an iptables
    33   extension. */
     
    4747#include <net/netfilter/nf_conntrack_timestamp.h>
    4848#include <net/netfilter/nf_conntrack_timeout.h>
     49#include <net/netfilter/nf_conntrack_dscpremark_ext.h>
    4950#include <net/netfilter/nf_conntrack_labels.h>
    5051#include <net/netfilter/nf_nat.h>
     
    836837        nf_ct_tstamp_ext_add(ct, GFP_ATOMIC);
    837838        nf_ct_labels_ext_add(ct);
     839        nf_ct_dscpremark_ext_add(ct, GFP_ATOMIC);
    838840
    839841        ecache = tmpl ? nf_ct_ecache_find(tmpl) : NULL;
     
    13811383        nf_conntrack_proto_fini();
    13821384        nf_conntrack_labels_fini();
     1385        nf_conntrack_dscpremark_ext_fini();
    13831386        nf_conntrack_helper_fini();
    13841387        nf_conntrack_timeout_fini();
     
    15561559               NF_CONNTRACK_VERSION, nf_conntrack_htable_size,
    15571560               nf_conntrack_max);
     1561
     1562        ret = nf_conntrack_dscpremark_ext_init();
     1563        if (ret < 0)
     1564                goto err_dscpremark_ext;
    15581565
    15591566        ret = nf_conntrack_expect_init();
     
    16231630        nf_conntrack_expect_fini();
    16241631err_expect:
     1632        nf_conntrack_dscpremark_ext_fini();
     1633err_dscpremark_ext:
    16251634        return ret;
    16261635}
  • src/linux/universal/linux-3.10/net/netfilter/xt_DSCP.c

    r21644 r32695  
    1919#include <linux/netfilter/x_tables.h>
    2020#include <linux/netfilter/xt_DSCP.h>
     21#include <net/netfilter/nf_conntrack_dscpremark_ext.h>
    2122
    2223MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
     
    3334        const struct xt_DSCP_info *dinfo = par->targinfo;
    3435        u_int8_t dscp = ipv4_get_dsfield(ip_hdr(skb)) >> XT_DSCP_SHIFT;
     36#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     37        struct nf_conn *ct;
     38        enum ip_conntrack_info ctinfo;
     39#endif
    3540
    3641        if (dscp != dinfo->dscp) {
     
    4146                                    dinfo->dscp << XT_DSCP_SHIFT);
    4247
     48#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     49                ct = nf_ct_get(skb, &ctinfo);
     50                if (!ct)
     51                        return XT_CONTINUE;
     52
     53                nf_conntrack_dscpremark_ext_set_dscp_rule_valid(ct);
     54#endif
    4355        }
    4456        return XT_CONTINUE;
     
    5062        const struct xt_DSCP_info *dinfo = par->targinfo;
    5163        u_int8_t dscp = ipv6_get_dsfield(ipv6_hdr(skb)) >> XT_DSCP_SHIFT;
    52 
     64#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     65        struct nf_conn *ct;
     66        enum ip_conntrack_info ctinfo;
     67#endif
    5368        if (dscp != dinfo->dscp) {
    5469                if (!skb_make_writable(skb, sizeof(struct ipv6hdr)))
     
    5772                ipv6_change_dsfield(ipv6_hdr(skb), (__u8)(~XT_DSCP_MASK),
    5873                                    dinfo->dscp << XT_DSCP_SHIFT);
     74
     75#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     76                ct = nf_ct_get(skb, &ctinfo);
     77                if (!ct)
     78                        return XT_CONTINUE;
     79
     80                nf_conntrack_dscpremark_ext_set_dscp_rule_valid(ct);
     81#endif
    5982        }
    6083        return XT_CONTINUE;
  • src/linux/universal/linux-3.10/net/shortcut-fe/sfe_cm.c

    r32659 r32695  
    3030#include <net/netfilter/nf_conntrack_zones.h>
    3131#include <net/netfilter/nf_conntrack_core.h>
     32#include <net/netfilter/nf_conntrack_timeout.h>
    3233#include <linux/netfilter/xt_dscp.h>
    3334#include <linux/if_bridge.h>
     
    867868                spin_unlock_bh(&ct->lock);
    868869                break;
     870        case IPPROTO_UDP:
     871                /*
     872                 * In Linux connection track, UDP flow has two timeout values:
     873                 * /proc/sys/net/netfilter/nf_conntrack_udp_timeout:
     874                 *      this is for uni-direction UDP flow, normally its value is 60 seconds
     875                 * /proc/sys/net/netfilter/nf_conntrack_udp_timeout_stream:
     876                 *      this is for bi-direction UDP flow, normally its value is 180 seconds
     877                 *
     878                 * Linux will update timer of UDP flow to stream timeout once it seen packets
     879                 * in reply direction. But if flow is accelerated by NSS or SFE, Linux won't
     880                 * see any packets. So we have to do the same thing in our stats sync message.
     881                 */
     882                if (!test_bit(IPS_ASSURED_BIT, &ct->status) && acct) {
     883                        u_int64_t reply_pkts = atomic64_read(&SFE_ACCT_COUNTER(acct)[IP_CT_DIR_REPLY].packets);
     884
     885                        if (reply_pkts != 0) {
     886                                struct nf_conntrack_l4proto *l4proto;
     887                                unsigned int *timeouts;
     888
     889                                set_bit(IPS_SEEN_REPLY_BIT, &ct->status);
     890                                set_bit(IPS_ASSURED_BIT, &ct->status);
     891
     892                                l4proto = __nf_ct_l4proto_find((sis->is_v6 ? AF_INET6 : AF_INET), IPPROTO_UDP);
     893                                timeouts = nf_ct_timeout_lookup(&init_net, ct, l4proto);
     894
     895                                spin_lock_bh(&ct->lock);
     896                                ct->timeout.expires = jiffies + timeouts[UDP_CT_REPLIED];
     897                                spin_unlock_bh(&ct->lock);
     898                        }
     899                }
     900                break;
    869901        }
    870902
  • src/linux/universal/linux-3.18/include/net/netfilter/nf_conntrack_extend.h

    r26988 r32695  
    3434        NF_CT_EXT_RTCACHE,
    3535#endif
     36#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     37        NF_CT_EXT_DSCPREMARK,
     38#endif
    3639        NF_CT_EXT_CUSTOM,
    3740        NF_CT_EXT_NUM=NF_CT_EXT_CUSTOM+CONFIG_NF_CONNTRACK_CUSTOM,
     
    4952#define NF_CT_EXT_SYNPROXY_TYPE struct nf_conn_synproxy
    5053#define NF_CT_EXT_RTCACHE_TYPE struct nf_conn_rtcache
     54#define NF_CT_EXT_DSCPREMARK_TYPE struct nf_ct_dscpremark_ext
    5155
    5256/* Extensions: optional stuff which isn't permanently in struct. */
  • src/linux/universal/linux-3.18/net/netfilter/Kconfig

    r26988 r32695  
    138138
    139139          If unsure, say `N'.
     140
     141config NF_CONNTRACK_DSCPREMARK_EXT
     142        bool  'Connection tracking extension for dscp remark target'
     143        depends on NETFILTER_ADVANCED
     144        help
     145          This option enables support for connection tracking extension
     146          for dscp remark.
    140147
    141148config NF_CONNTRACK_TIMESTAMP
  • src/linux/universal/linux-3.18/net/netfilter/Makefile

    r25593 r32695  
    66nf_conntrack-$(CONFIG_NF_CONNTRACK_EVENTS) += nf_conntrack_ecache.o
    77nf_conntrack-$(CONFIG_NF_CONNTRACK_LABELS) += nf_conntrack_labels.o
     8nf_conntrack-$(CONFIG_NF_CONNTRACK_DSCPREMARK_EXT) += nf_conntrack_dscpremark_ext.o
    89
    910obj-$(CONFIG_NETFILTER) = netfilter.o
  • src/linux/universal/linux-3.18/net/netfilter/nf_conntrack_core.c

    r32623 r32695  
    1 /* Connection state tracking for netfilter.  This is separated from,
     1A/* Connection state tracking for netfilter.  This is separated from,
    22   but required by, the NAT layer; it can also be used by an iptables
    33   extension. */
     
    4848#include <net/netfilter/nf_conntrack_timestamp.h>
    4949#include <net/netfilter/nf_conntrack_timeout.h>
     50#include <net/netfilter/nf_conntrack_dscpremark_ext.h>
    5051#include <net/netfilter/nf_conntrack_labels.h>
    5152#include <net/netfilter/nf_conntrack_synproxy.h>
     
    950951        nf_ct_tstamp_ext_add(ct, GFP_ATOMIC);
    951952        nf_ct_labels_ext_add(ct);
     953        nf_ct_dscpremark_ext_add(ct, GFP_ATOMIC);
    952954
    953955        ecache = tmpl ? nf_ct_ecache_find(tmpl) : NULL;
     
    14781480        nf_conntrack_seqadj_fini();
    14791481        nf_conntrack_labels_fini();
     1482        nf_conntrack_dscpremark_ext_fini();
    14801483        nf_conntrack_helper_fini();
    14811484        nf_conntrack_timeout_fini();
     
    16631666               NF_CONNTRACK_VERSION, nf_conntrack_htable_size,
    16641667               nf_conntrack_max);
     1668
     1669        ret = nf_conntrack_dscpremark_ext_init();
     1670        if (ret < 0)
     1671                goto err_dscpremark_ext;
    16651672
    16661673        ret = nf_conntrack_expect_init();
     
    17361743        nf_conntrack_expect_fini();
    17371744err_expect:
     1745        nf_conntrack_dscpremark_ext_fini();
     1746err_dscpremark_ext:
    17381747        return ret;
    17391748}
  • src/linux/universal/linux-3.18/net/netfilter/xt_DSCP.c

    r25370 r32695  
    1919#include <linux/netfilter/x_tables.h>
    2020#include <linux/netfilter/xt_DSCP.h>
     21#include <net/netfilter/nf_conntrack_dscpremark_ext.h>
    2122
    2223MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
     
    3334        const struct xt_DSCP_info *dinfo = par->targinfo;
    3435        u_int8_t dscp = ipv4_get_dsfield(ip_hdr(skb)) >> XT_DSCP_SHIFT;
     36#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     37        struct nf_conn *ct;
     38        enum ip_conntrack_info ctinfo;
     39#endif
    3540
    3641        if (dscp != dinfo->dscp) {
     
    4146                                    dinfo->dscp << XT_DSCP_SHIFT);
    4247
     48#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     49                ct = nf_ct_get(skb, &ctinfo);
     50                if (!ct)
     51                        return XT_CONTINUE;
     52
     53                nf_conntrack_dscpremark_ext_set_dscp_rule_valid(ct);
     54#endif
    4355        }
    4456        return XT_CONTINUE;
     
    5062        const struct xt_DSCP_info *dinfo = par->targinfo;
    5163        u_int8_t dscp = ipv6_get_dsfield(ipv6_hdr(skb)) >> XT_DSCP_SHIFT;
    52 
     64#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     65        struct nf_conn *ct;
     66        enum ip_conntrack_info ctinfo;
     67#endif
    5368        if (dscp != dinfo->dscp) {
    5469                if (!skb_make_writable(skb, sizeof(struct ipv6hdr)))
     
    5772                ipv6_change_dsfield(ipv6_hdr(skb), (__u8)(~XT_DSCP_MASK),
    5873                                    dinfo->dscp << XT_DSCP_SHIFT);
     74
     75#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     76                ct = nf_ct_get(skb, &ctinfo);
     77                if (!ct)
     78                        return XT_CONTINUE;
     79
     80                nf_conntrack_dscpremark_ext_set_dscp_rule_valid(ct);
     81#endif
    5982        }
    6083        return XT_CONTINUE;
  • src/linux/universal/linux-3.18/net/shortcut-fe/sfe_cm.c

    r32659 r32695  
    3030#include <net/netfilter/nf_conntrack_zones.h>
    3131#include <net/netfilter/nf_conntrack_core.h>
     32#include <net/netfilter/nf_conntrack_timeout.h>
    3233#include <linux/netfilter/xt_dscp.h>
    3334#include <linux/if_bridge.h>
     
    867868                spin_unlock_bh(&ct->lock);
    868869                break;
     870        case IPPROTO_UDP:
     871                /*
     872                 * In Linux connection track, UDP flow has two timeout values:
     873                 * /proc/sys/net/netfilter/nf_conntrack_udp_timeout:
     874                 *      this is for uni-direction UDP flow, normally its value is 60 seconds
     875                 * /proc/sys/net/netfilter/nf_conntrack_udp_timeout_stream:
     876                 *      this is for bi-direction UDP flow, normally its value is 180 seconds
     877                 *
     878                 * Linux will update timer of UDP flow to stream timeout once it seen packets
     879                 * in reply direction. But if flow is accelerated by NSS or SFE, Linux won't
     880                 * see any packets. So we have to do the same thing in our stats sync message.
     881                 */
     882                if (!test_bit(IPS_ASSURED_BIT, &ct->status) && acct) {
     883                        u_int64_t reply_pkts = atomic64_read(&SFE_ACCT_COUNTER(acct)[IP_CT_DIR_REPLY].packets);
     884
     885                        if (reply_pkts != 0) {
     886                                struct nf_conntrack_l4proto *l4proto;
     887                                unsigned int *timeouts;
     888
     889                                set_bit(IPS_SEEN_REPLY_BIT, &ct->status);
     890                                set_bit(IPS_ASSURED_BIT, &ct->status);
     891
     892                                l4proto = __nf_ct_l4proto_find((sis->is_v6 ? AF_INET6 : AF_INET), IPPROTO_UDP);
     893                                timeouts = nf_ct_timeout_lookup(&init_net, ct, l4proto);
     894
     895                                spin_lock_bh(&ct->lock);
     896                                ct->timeout.expires = jiffies + timeouts[UDP_CT_REPLIED];
     897                                spin_unlock_bh(&ct->lock);
     898                        }
     899                }
     900                break;
    869901        }
    870902
  • src/linux/universal/linux-3.2/include/net/netfilter/nf_conntrack_extend.h

    r27000 r32695  
    2121        NF_CT_EXT_TSTAMP,
    2222#endif
     23#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     24        NF_CT_EXT_DSCPREMARK,
     25#endif
    2326        NF_CT_EXT_CUSTOM,
    2427        NF_CT_EXT_NUM=NF_CT_EXT_CUSTOM+CONFIG_NF_CONNTRACK_CUSTOM,
     
    3134#define NF_CT_EXT_ZONE_TYPE struct nf_conntrack_zone
    3235#define NF_CT_EXT_TSTAMP_TYPE struct nf_conn_tstamp
     36#define NF_CT_EXT_DSCPREMARK_TYPE struct nf_ct_dscpremark_ext
    3337
    3438/* Extensions: optional stuff which isn't permanently in struct. */
  • src/linux/universal/linux-3.2/net/netfilter/Kconfig

    r27000 r32695  
    9595
    9696          If unsure, say `N'.
     97
     98config NF_CONNTRACK_DSCPREMARK_EXT
     99        bool  'Connection tracking extension for dscp remark target'
     100        depends on NETFILTER_ADVANCED
     101        help
     102          This option enables support for connection tracking extension
     103          for dscp remark.
    97104
    98105config NF_CONNTRACK_TIMESTAMP
  • src/linux/universal/linux-3.2/net/netfilter/nf_conntrack_core.c

    r32658 r32695  
    1 /* Connection state tracking for netfilter.  This is separated from,
     1A/* Connection state tracking for netfilter.  This is separated from,
    22   but required by, the NAT layer; it can also be used by an iptables
    33   extension. */
     
    4545#include <net/netfilter/nf_conntrack_zones.h>
    4646#include <net/netfilter/nf_conntrack_timestamp.h>
     47#include <net/netfilter/nf_conntrack_dscpremark_ext.h>
    4748#include <net/netfilter/nf_nat.h>
    4849#include <net/netfilter/nf_nat_core.h>
     
    781782        nf_ct_acct_ext_add(ct, GFP_ATOMIC);
    782783        nf_ct_tstamp_ext_add(ct, GFP_ATOMIC);
     784        nf_ct_dscpremark_ext_add(ct, GFP_ATOMIC);
    783785
    784786        ecache = tmpl ? nf_ct_ecache_find(tmpl) : NULL;
     
    13131315        nf_conntrack_helper_fini();
    13141316        nf_conntrack_proto_fini();
     1317        nf_conntrack_dscpremark_ext_fini();
    13151318#ifdef CONFIG_NF_CONNTRACK_ZONES
    13161319        nf_ct_extend_unregister(&nf_ct_zone_extend);
     
    15521555                goto err_hash;
    15531556        }
     1557        ret = nf_conntrack_dscpremark_ext_init();
     1558        if (ret < 0)
     1559                goto err_dscpremark_ext;
    15541560        ret = nf_conntrack_expect_init(net);
    15551561        if (ret < 0)
     
    15821588        free_percpu(net->ct.stat);
    15831589err_stat:
     1590        nf_conntrack_dscpremark_ext_fini();
     1591err_dscpremark_ext:
    15841592        return ret;
    15851593}
  • src/linux/universal/linux-3.2/net/netfilter/xt_DSCP.c

    r18171 r32695  
    1919#include <linux/netfilter/x_tables.h>
    2020#include <linux/netfilter/xt_DSCP.h>
     21#include <net/netfilter/nf_conntrack_dscpremark_ext.h>
    2122
    2223MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
     
    3334        const struct xt_DSCP_info *dinfo = par->targinfo;
    3435        u_int8_t dscp = ipv4_get_dsfield(ip_hdr(skb)) >> XT_DSCP_SHIFT;
     36#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     37        struct nf_conn *ct;
     38        enum ip_conntrack_info ctinfo;
     39#endif
    3540
    3641        if (dscp != dinfo->dscp) {
     
    4146                                    dinfo->dscp << XT_DSCP_SHIFT);
    4247
     48#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     49                ct = nf_ct_get(skb, &ctinfo);
     50                if (!ct)
     51                        return XT_CONTINUE;
     52
     53                nf_conntrack_dscpremark_ext_set_dscp_rule_valid(ct);
     54#endif
    4355        }
    4456        return XT_CONTINUE;
     
    5062        const struct xt_DSCP_info *dinfo = par->targinfo;
    5163        u_int8_t dscp = ipv6_get_dsfield(ipv6_hdr(skb)) >> XT_DSCP_SHIFT;
    52 
     64#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     65        struct nf_conn *ct;
     66        enum ip_conntrack_info ctinfo;
     67#endif
    5368        if (dscp != dinfo->dscp) {
    5469                if (!skb_make_writable(skb, sizeof(struct ipv6hdr)))
     
    5772                ipv6_change_dsfield(ipv6_hdr(skb), (__u8)(~XT_DSCP_MASK),
    5873                                    dinfo->dscp << XT_DSCP_SHIFT);
     74
     75#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     76                ct = nf_ct_get(skb, &ctinfo);
     77                if (!ct)
     78                        return XT_CONTINUE;
     79
     80                nf_conntrack_dscpremark_ext_set_dscp_rule_valid(ct);
     81#endif
    5982        }
    6083        return XT_CONTINUE;
  • src/linux/universal/linux-3.2/net/shortcut-fe/sfe_cm.c

    r32659 r32695  
    3030#include <net/netfilter/nf_conntrack_zones.h>
    3131#include <net/netfilter/nf_conntrack_core.h>
     32#include <net/netfilter/nf_conntrack_timeout.h>
    3233#include <linux/netfilter/xt_dscp.h>
    3334#include <linux/if_bridge.h>
     
    867868                spin_unlock_bh(&ct->lock);
    868869                break;
     870        case IPPROTO_UDP:
     871                /*
     872                 * In Linux connection track, UDP flow has two timeout values:
     873                 * /proc/sys/net/netfilter/nf_conntrack_udp_timeout:
     874                 *      this is for uni-direction UDP flow, normally its value is 60 seconds
     875                 * /proc/sys/net/netfilter/nf_conntrack_udp_timeout_stream:
     876                 *      this is for bi-direction UDP flow, normally its value is 180 seconds
     877                 *
     878                 * Linux will update timer of UDP flow to stream timeout once it seen packets
     879                 * in reply direction. But if flow is accelerated by NSS or SFE, Linux won't
     880                 * see any packets. So we have to do the same thing in our stats sync message.
     881                 */
     882                if (!test_bit(IPS_ASSURED_BIT, &ct->status) && acct) {
     883                        u_int64_t reply_pkts = atomic64_read(&SFE_ACCT_COUNTER(acct)[IP_CT_DIR_REPLY].packets);
     884
     885                        if (reply_pkts != 0) {
     886                                struct nf_conntrack_l4proto *l4proto;
     887                                unsigned int *timeouts;
     888
     889                                set_bit(IPS_SEEN_REPLY_BIT, &ct->status);
     890                                set_bit(IPS_ASSURED_BIT, &ct->status);
     891
     892                                l4proto = __nf_ct_l4proto_find((sis->is_v6 ? AF_INET6 : AF_INET), IPPROTO_UDP);
     893                                timeouts = nf_ct_timeout_lookup(&init_net, ct, l4proto);
     894
     895                                spin_lock_bh(&ct->lock);
     896                                ct->timeout.expires = jiffies + timeouts[UDP_CT_REPLIED];
     897                                spin_unlock_bh(&ct->lock);
     898                        }
     899                }
     900                break;
    869901        }
    870902
  • src/linux/universal/linux-4.4/include/net/netfilter/nf_conntrack_extend.h

    r28606 r32695  
    3434        NF_CT_EXT_RTCACHE,
    3535#endif
     36#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     37        NF_CT_EXT_DSCPREMARK,
     38#endif
    3639        NF_CT_EXT_CUSTOM,
    3740        NF_CT_EXT_NUM=NF_CT_EXT_CUSTOM+CONFIG_NF_CONNTRACK_CUSTOM,
     
    4952#define NF_CT_EXT_SYNPROXY_TYPE struct nf_conn_synproxy
    5053#define NF_CT_EXT_RTCACHE_TYPE struct nf_conn_rtcache
     54#define NF_CT_EXT_DSCPREMARK_TYPE struct nf_ct_dscpremark_ext
    5155
    5256/* Extensions: optional stuff which isn't permanently in struct. */
  • src/linux/universal/linux-4.4/net/netfilter/Kconfig

    r28606 r32695  
    146146
    147147          If unsure, say `N'.
     148
     149config NF_CONNTRACK_DSCPREMARK_EXT
     150        bool  'Connection tracking extension for dscp remark target'
     151        depends on NETFILTER_ADVANCED
     152        help
     153          This option enables support for connection tracking extension
     154          for dscp remark.
    148155
    149156config NF_CONNTRACK_TIMESTAMP
  • src/linux/universal/linux-4.4/net/netfilter/Makefile

    r28606 r32695  
    66nf_conntrack-$(CONFIG_NF_CONNTRACK_EVENTS) += nf_conntrack_ecache.o
    77nf_conntrack-$(CONFIG_NF_CONNTRACK_LABELS) += nf_conntrack_labels.o
     8nf_conntrack-$(CONFIG_NF_CONNTRACK_DSCPREMARK_EXT) += nf_conntrack_dscpremark_ext.o
    89
    910obj-$(CONFIG_NETFILTER) = netfilter.o
  • src/linux/universal/linux-4.4/net/netfilter/nf_conntrack_core.c

    r32623 r32695  
    1 /* Connection state tracking for netfilter.  This is separated from,
     1A/* Connection state tracking for netfilter.  This is separated from,
    22   but required by, the NAT layer; it can also be used by an iptables
    33   extension. */
     
    4848#include <net/netfilter/nf_conntrack_timestamp.h>
    4949#include <net/netfilter/nf_conntrack_timeout.h>
     50#include <net/netfilter/nf_conntrack_dscpremark_ext.h>
    5051#include <net/netfilter/nf_conntrack_labels.h>
    5152#include <net/netfilter/nf_conntrack_synproxy.h>
     
    970971        nf_ct_tstamp_ext_add(ct, GFP_ATOMIC);
    971972        nf_ct_labels_ext_add(ct);
     973        nf_ct_dscpremark_ext_add(ct, GFP_ATOMIC);
    972974
    973975        ecache = tmpl ? nf_ct_ecache_find(tmpl) : NULL;
     
    14941496        nf_conntrack_seqadj_fini();
    14951497        nf_conntrack_labels_fini();
     1498        nf_conntrack_dscpremark_ext_fini();
    14961499        nf_conntrack_helper_fini();
    14971500        nf_conntrack_timeout_fini();
     
    16811684               NF_CONNTRACK_VERSION, nf_conntrack_htable_size,
    16821685               nf_conntrack_max);
     1686
     1687        ret = nf_conntrack_dscpremark_ext_init();
     1688        if (ret < 0)
     1689                goto err_dscpremark_ext;
    16831690
    16841691        ret = nf_conntrack_expect_init();
     
    17541761        nf_conntrack_expect_fini();
    17551762err_expect:
     1763        nf_conntrack_dscpremark_ext_fini();
     1764err_dscpremark_ext:
    17561765        return ret;
    17571766}
  • src/linux/universal/linux-4.4/net/netfilter/xt_DSCP.c

    r28606 r32695  
    1919#include <linux/netfilter/x_tables.h>
    2020#include <linux/netfilter/xt_DSCP.h>
     21#include <net/netfilter/nf_conntrack_dscpremark_ext.h>
    2122
    2223MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
     
    3334        const struct xt_DSCP_info *dinfo = par->targinfo;
    3435        u_int8_t dscp = ipv4_get_dsfield(ip_hdr(skb)) >> XT_DSCP_SHIFT;
     36#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     37        struct nf_conn *ct;
     38        enum ip_conntrack_info ctinfo;
     39#endif
    3540
    3641        if (dscp != dinfo->dscp) {
     
    4247                                    dinfo->dscp << XT_DSCP_SHIFT);
    4348
     49#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     50                ct = nf_ct_get(skb, &ctinfo);
     51                if (!ct)
     52                        return XT_CONTINUE;
     53
     54                nf_conntrack_dscpremark_ext_set_dscp_rule_valid(ct);
     55#endif
    4456        }
    4557        return XT_CONTINUE;
     
    5163        const struct xt_DSCP_info *dinfo = par->targinfo;
    5264        u_int8_t dscp = ipv6_get_dsfield(ipv6_hdr(skb)) >> XT_DSCP_SHIFT;
    53 
     65#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     66        struct nf_conn *ct;
     67        enum ip_conntrack_info ctinfo;
     68#endif
    5469        if (dscp != dinfo->dscp) {
    5570                if (!skb_make_writable(skb, sizeof(struct ipv6hdr)))
     
    5974                                    (__force __u8)(~XT_DSCP_MASK),
    6075                                    dinfo->dscp << XT_DSCP_SHIFT);
     76
     77#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     78                ct = nf_ct_get(skb, &ctinfo);
     79                if (!ct)
     80                        return XT_CONTINUE;
     81
     82                nf_conntrack_dscpremark_ext_set_dscp_rule_valid(ct);
     83#endif
    6184        }
    6285        return XT_CONTINUE;
  • src/linux/universal/linux-4.4/net/shortcut-fe/sfe_cm.c

    r32659 r32695  
    3030#include <net/netfilter/nf_conntrack_zones.h>
    3131#include <net/netfilter/nf_conntrack_core.h>
     32#include <net/netfilter/nf_conntrack_timeout.h>
    3233#include <linux/netfilter/xt_dscp.h>
    3334#include <linux/if_bridge.h>
     
    867868                spin_unlock_bh(&ct->lock);
    868869                break;
     870        case IPPROTO_UDP:
     871                /*
     872                 * In Linux connection track, UDP flow has two timeout values:
     873                 * /proc/sys/net/netfilter/nf_conntrack_udp_timeout:
     874                 *      this is for uni-direction UDP flow, normally its value is 60 seconds
     875                 * /proc/sys/net/netfilter/nf_conntrack_udp_timeout_stream:
     876                 *      this is for bi-direction UDP flow, normally its value is 180 seconds
     877                 *
     878                 * Linux will update timer of UDP flow to stream timeout once it seen packets
     879                 * in reply direction. But if flow is accelerated by NSS or SFE, Linux won't
     880                 * see any packets. So we have to do the same thing in our stats sync message.
     881                 */
     882                if (!test_bit(IPS_ASSURED_BIT, &ct->status) && acct) {
     883                        u_int64_t reply_pkts = atomic64_read(&SFE_ACCT_COUNTER(acct)[IP_CT_DIR_REPLY].packets);
     884
     885                        if (reply_pkts != 0) {
     886                                struct nf_conntrack_l4proto *l4proto;
     887                                unsigned int *timeouts;
     888
     889                                set_bit(IPS_SEEN_REPLY_BIT, &ct->status);
     890                                set_bit(IPS_ASSURED_BIT, &ct->status);
     891
     892                                l4proto = __nf_ct_l4proto_find((sis->is_v6 ? AF_INET6 : AF_INET), IPPROTO_UDP);
     893                                timeouts = nf_ct_timeout_lookup(&init_net, ct, l4proto);
     894
     895                                spin_lock_bh(&ct->lock);
     896                                ct->timeout.expires = jiffies + timeouts[UDP_CT_REPLIED];
     897                                spin_unlock_bh(&ct->lock);
     898                        }
     899                }
     900                break;
    869901        }
    870902
  • src/linux/universal/linux-4.9/include/net/netfilter/nf_conntrack_extend.h

    r31574 r32695  
    3131        NF_CT_EXT_RTCACHE,
    3232#endif
     33#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     34        NF_CT_EXT_DSCPREMARK,
     35#endif
    3336        NF_CT_EXT_CUSTOM,
    3437        NF_CT_EXT_NUM=NF_CT_EXT_CUSTOM+CONFIG_NF_CONNTRACK_CUSTOM,
     
    4548#define NF_CT_EXT_SYNPROXY_TYPE struct nf_conn_synproxy
    4649#define NF_CT_EXT_RTCACHE_TYPE struct nf_conn_rtcache
     50#define NF_CT_EXT_DSCPREMARK_TYPE struct nf_ct_dscpremark_ext
    4751
    4852/* Extensions: optional stuff which isn't permanently in struct. */
  • src/linux/universal/linux-4.9/net/netfilter/Kconfig

    r31587 r32695  
    146146
    147147          If unsure, say `N'.
     148
     149config NF_CONNTRACK_DSCPREMARK_EXT
     150        bool  'Connection tracking extension for dscp remark target'
     151        depends on NETFILTER_ADVANCED
     152        help
     153          This option enables support for connection tracking extension
     154          for dscp remark.
    148155
    149156config NF_CONNTRACK_TIMESTAMP
  • src/linux/universal/linux-4.9/net/netfilter/Makefile

    r31574 r32695  
    66nf_conntrack-$(CONFIG_NF_CONNTRACK_EVENTS) += nf_conntrack_ecache.o
    77nf_conntrack-$(CONFIG_NF_CONNTRACK_LABELS) += nf_conntrack_labels.o
     8nf_conntrack-$(CONFIG_NF_CONNTRACK_DSCPREMARK_EXT) += nf_conntrack_dscpremark_ext.o
    89
    910obj-$(CONFIG_NETFILTER) = netfilter.o
  • src/linux/universal/linux-4.9/net/netfilter/nf_conntrack_core.c

    r32623 r32695  
    5050#include <net/netfilter/nf_conntrack_timestamp.h>
    5151#include <net/netfilter/nf_conntrack_timeout.h>
     52#include <net/netfilter/nf_conntrack_dscpremark_ext.h>
    5253#include <net/netfilter/nf_conntrack_labels.h>
    5354#include <net/netfilter/nf_conntrack_synproxy.h>
     
    11751176        nf_ct_tstamp_ext_add(ct, GFP_ATOMIC);
    11761177        nf_ct_labels_ext_add(ct);
     1178        nf_ct_dscpremark_ext_add(ct, GFP_ATOMIC);
    11771179
    11781180        ecache = tmpl ? nf_ct_ecache_find(tmpl) : NULL;
     
    16611663        nf_conntrack_seqadj_fini();
    16621664        nf_conntrack_labels_fini();
     1665        nf_conntrack_dscpremark_ext_fini();
    16631666        nf_conntrack_helper_fini();
    16641667        nf_conntrack_timeout_fini();
     
    18851888               NF_CONNTRACK_VERSION, nf_conntrack_htable_size,
    18861889               nf_conntrack_max);
     1890
     1891        ret = nf_conntrack_dscpremark_ext_init();
     1892        if (ret < 0)
     1893                goto err_dscpremark_ext;
    18871894
    18881895        ret = nf_conntrack_expect_init();
     
    19531960        nf_conntrack_expect_fini();
    19541961err_expect:
     1962        nf_conntrack_dscpremark_ext_fini();
     1963err_dscpremark_ext:
    19551964        kmem_cache_destroy(nf_conntrack_cachep);
    19561965err_cachep:
  • src/linux/universal/linux-4.9/net/netfilter/xt_DSCP.c

    r31574 r32695  
    1919#include <linux/netfilter/x_tables.h>
    2020#include <linux/netfilter/xt_DSCP.h>
     21#include <net/netfilter/nf_conntrack_dscpremark_ext.h>
    2122
    2223MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
     
    3334        const struct xt_DSCP_info *dinfo = par->targinfo;
    3435        u_int8_t dscp = ipv4_get_dsfield(ip_hdr(skb)) >> XT_DSCP_SHIFT;
     36#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     37        struct nf_conn *ct;
     38        enum ip_conntrack_info ctinfo;
     39#endif
    3540
    3641        if (dscp != dinfo->dscp) {
     
    4247                                    dinfo->dscp << XT_DSCP_SHIFT);
    4348
     49#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     50                ct = nf_ct_get(skb, &ctinfo);
     51                if (!ct)
     52                        return XT_CONTINUE;
     53
     54                nf_conntrack_dscpremark_ext_set_dscp_rule_valid(ct);
     55#endif
    4456        }
    4557        return XT_CONTINUE;
     
    5163        const struct xt_DSCP_info *dinfo = par->targinfo;
    5264        u_int8_t dscp = ipv6_get_dsfield(ipv6_hdr(skb)) >> XT_DSCP_SHIFT;
    53 
     65#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     66        struct nf_conn *ct;
     67        enum ip_conntrack_info ctinfo;
     68#endif
    5469        if (dscp != dinfo->dscp) {
    5570                if (!skb_make_writable(skb, sizeof(struct ipv6hdr)))
     
    5974                                    (__force __u8)(~XT_DSCP_MASK),
    6075                                    dinfo->dscp << XT_DSCP_SHIFT);
     76
     77#ifdef CONFIG_NF_CONNTRACK_DSCPREMARK_EXT
     78                ct = nf_ct_get(skb, &ctinfo);
     79                if (!ct)
     80                        return XT_CONTINUE;
     81
     82                nf_conntrack_dscpremark_ext_set_dscp_rule_valid(ct);
     83#endif
    6184        }
    6285        return XT_CONTINUE;
  • src/linux/universal/linux-4.9/net/shortcut-fe/sfe_cm.c

    r32659 r32695  
    3030#include <net/netfilter/nf_conntrack_zones.h>
    3131#include <net/netfilter/nf_conntrack_core.h>
     32#include <net/netfilter/nf_conntrack_timeout.h>
    3233#include <linux/netfilter/xt_dscp.h>
    3334#include <linux/if_bridge.h>
     
    867868                spin_unlock_bh(&ct->lock);
    868869                break;
     870        case IPPROTO_UDP:
     871                /*
     872                 * In Linux connection track, UDP flow has two timeout values:
     873                 * /proc/sys/net/netfilter/nf_conntrack_udp_timeout:
     874                 *      this is for uni-direction UDP flow, normally its value is 60 seconds
     875                 * /proc/sys/net/netfilter/nf_conntrack_udp_timeout_stream:
     876                 *      this is for bi-direction UDP flow, normally its value is 180 seconds
     877                 *
     878                 * Linux will update timer of UDP flow to stream timeout once it seen packets
     879                 * in reply direction. But if flow is accelerated by NSS or SFE, Linux won't
     880                 * see any packets. So we have to do the same thing in our stats sync message.
     881                 */
     882                if (!test_bit(IPS_ASSURED_BIT, &ct->status) && acct) {
     883                        u_int64_t reply_pkts = atomic64_read(&SFE_ACCT_COUNTER(acct)[IP_CT_DIR_REPLY].packets);
     884
     885                        if (reply_pkts != 0) {
     886                                struct nf_conntrack_l4proto *l4proto;
     887                                unsigned int *timeouts;
     888
     889                                set_bit(IPS_SEEN_REPLY_BIT, &ct->status);
     890                                set_bit(IPS_ASSURED_BIT, &ct->status);
     891
     892                                l4proto = __nf_ct_l4proto_find((sis->is_v6 ? AF_INET6 : AF_INET), IPPROTO_UDP);
     893                                timeouts = nf_ct_timeout_lookup(&init_net, ct, l4proto);
     894
     895                                spin_lock_bh(&ct->lock);
     896                                ct->timeout.expires = jiffies + timeouts[UDP_CT_REPLIED];
     897                                spin_unlock_bh(&ct->lock);
     898                        }
     899                }
     900                break;
    869901        }
    870902
Note: See TracChangeset for help on using the changeset viewer.