20 Sep, 2016

2 commits


18 Aug, 2016

2 commits

  • The act_police uses its own code to walk the
    action hashtable, which leads to that we could
    not flush standalone tc police actions, so just
    switch to tcf_generic_walker() like other actions.

    (Joint work from Roman and Cong.)

    Signed-off-by: Roman Mashak
    Signed-off-by: Cong Wang
    Acked-by: Jamal Hadi Salim
    Signed-off-by: David S. Miller

    Roman Mashak
     
  • Jamal reported a crash when we create a police action
    with a specific index, this is because the init logic
    is not correct, we should always create one for this
    case. Just unify the logic with other tc actions.

    Fixes: a03e6fe56971 ("act_police: fix a crash during removal")
    Reported-by: Jamal Hadi Salim
    Signed-off-by: Cong Wang
    Acked-by: Jamal Hadi Salim
    Signed-off-by: David S. Miller

    WANG Cong
     

26 Jul, 2016

2 commits

  • After the previous patch, struct tc_action should be enough
    to represent the generic tc action, tcf_common is not necessary
    any more. This patch gets rid of it to make tc action code
    more readable.

    Cc: Jamal Hadi Salim
    Signed-off-by: Cong Wang
    Signed-off-by: David S. Miller

    WANG Cong
     
  • struct tc_action is confusing, currently we use it for two purposes:
    1) Pass in arguments and carry out results from helper functions
    2) A generic representation for tc actions

    The first one is error-prone, since we need to make sure we don't
    miss anything. This patch aims to get rid of this use, by moving
    tc_action into tcf_common, so that they are allocated together
    in hashtable and can be cast'ed easily.

    And together with the following patch, we could really make
    tc_action a generic representation for all tc actions and each
    type of action can inherit from it.

    Cc: Jamal Hadi Salim
    Signed-off-by: Cong Wang
    Signed-off-by: David S. Miller

    WANG Cong
     

15 Jun, 2016

1 commit


11 Jun, 2016

1 commit

  • Conflicts:
    net/sched/act_police.c
    net/sched/sch_drr.c
    net/sched/sch_hfsc.c
    net/sched/sch_prio.c
    net/sched/sch_red.c
    net/sched/sch_tbf.c

    In net-next the drop methods of the packet schedulers got removed, so
    the bug fixes to them in 'net' are irrelevant.

    A packet action unload crash fix conflicts with the addition of the
    new firstuse timestamp.

    Signed-off-by: David S. Miller

    David S. Miller
     

08 Jun, 2016

3 commits

  • The police action is using its own code to initialize tcf hash
    info, which makes us to forgot to initialize a->hinfo correctly.
    Fix this by calling the helper function tcf_hash_create() directly.

    This patch fixed the following crash:

    BUG: unable to handle kernel NULL pointer dereference at 0000000000000028
    IP: [] __lock_acquire+0xd3/0xf91
    PGD d3c34067 PUD d3e18067 PMD 0
    Oops: 0000 [#1] SMP
    CPU: 2 PID: 853 Comm: tc Not tainted 4.6.0+ #87
    Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    task: ffff8800d3e28040 ti: ffff8800d3f6c000 task.ti: ffff8800d3f6c000
    RIP: 0010:[] [] __lock_acquire+0xd3/0xf91
    RSP: 0000:ffff88011b203c80 EFLAGS: 00010002
    RAX: 0000000000000046 RBX: 0000000000000000 RCX: 0000000000000000
    RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000028
    RBP: ffff88011b203d40 R08: 0000000000000001 R09: 0000000000000000
    R10: ffff88011b203d58 R11: ffff88011b208000 R12: 0000000000000001
    R13: ffff8800d3e28040 R14: 0000000000000028 R15: 0000000000000000
    FS: 0000000000000000(0000) GS:ffff88011b200000(0000) knlGS:0000000000000000
    CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000028 CR3: 00000000d4be1000 CR4: 00000000000006e0
    Stack:
    ffff8800d3e289c0 0000000000000046 000000001b203d60 ffffffff00000000
    0000000000000000 ffff880000000000 0000000000000000 ffffffff00000000
    ffffffff8187142c ffff88011b203ce8 ffff88011b203ce8 ffffffff8101dbfc
    Call Trace:

    [] ? __tcf_hash_release+0x77/0xd1
    [] ? native_sched_clock+0x1a/0x35
    [] ? native_sched_clock+0x1a/0x35
    [] ? sched_clock_local+0x11/0x78
    [] ? mark_lock+0x24/0x201
    [] lock_acquire+0x120/0x1b4
    [] ? lock_acquire+0x120/0x1b4
    [] ? __tcf_hash_release+0x77/0xd1
    [] _raw_spin_lock_bh+0x3c/0x72
    [] ? __tcf_hash_release+0x77/0xd1
    [] __tcf_hash_release+0x77/0xd1
    [] tcf_action_destroy+0x49/0x7c
    [] tcf_exts_destroy+0x20/0x2d
    [] u32_destroy_key+0x1b/0x4d
    [] u32_delete_key_freepf_rcu+0x1b/0x1d
    [] rcu_process_callbacks+0x610/0x82e
    [] ? u32_destroy_key+0x4d/0x4d
    [] __do_softirq+0x191/0x3f4

    Fixes: ddf97ccdd7cb ("net_sched: add network namespace support for tc actions")
    Cc: Jamal Hadi Salim
    Signed-off-by: Cong Wang
    Signed-off-by: David S. Miller

    WANG Cong
     
  • Large tc dumps (tc -s {qdisc|class} sh dev ethX) done by Google BwE host
    agent [1] are problematic at scale :

    For each qdisc/class found in the dump, we currently lock the root qdisc
    spinlock in order to get stats. Sampling stats every 5 seconds from
    thousands of HTB classes is a challenge when the root qdisc spinlock is
    under high pressure. Not only the dumps take time, they also slow
    down the fast path (queue/dequeue packets) by 10 % to 20 % in some cases.

    An audit of existing qdiscs showed that sch_fq_codel is the only qdisc
    that might need the qdisc lock in fq_codel_dump_stats() and
    fq_codel_dump_class_stats()

    In v2 of this patch, I now use the Qdisc running seqcount to provide
    consistent reads of packets/bytes counters, regardless of 32/64 bit arches.

    I also changed rate estimators to use the same infrastructure
    so that they no longer need to lock root qdisc lock.

    [1]
    http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43838.pdf

    Signed-off-by: Eric Dumazet
    Cc: Cong Wang
    Cc: Jamal Hadi Salim
    Cc: John Fastabend
    Cc: Kevin Athey
    Cc: Xiaotian Pei
    Signed-off-by: David S. Miller

    Eric Dumazet
     
  • Useful to know when the action was first used for accounting
    (and debugging)

    Signed-off-by: Jamal Hadi Salim
    Signed-off-by: David S. Miller

    Jamal Hadi Salim
     

25 May, 2016

1 commit


26 Feb, 2016

1 commit

  • Currently tc actions are stored in a per-module hashtable,
    therefore are visible to all network namespaces. This is
    probably the last part of the tc subsystem which is not
    aware of netns now. This patch makes them per-netns,
    several tc action API's need to be adjusted for this.

    The tc action API code is ugly due to historical reasons,
    we need to refactor that code in the future.

    Cc: Jamal Hadi Salim
    Signed-off-by: Cong Wang
    Acked-by: Jamal Hadi Salim
    Signed-off-by: David S. Miller

    WANG Cong
     

07 Nov, 2014

1 commit


30 Sep, 2014

1 commit

  • In order to run qdisc's without locking statistics and estimators
    need to be handled correctly.

    To resolve bstats make the statistics per cpu. And because this is
    only needed for qdiscs that are running without locks which is not
    the case for most qdiscs in the near future only create percpu
    stats when qdiscs set the TCQ_F_CPUSTATS flag.

    Next because estimators use the bstats to calculate packets per
    second and bytes per second the estimator code paths are updated
    to use the per cpu statistics.

    Signed-off-by: John Fastabend
    Signed-off-by: David S. Miller

    John Fastabend
     

23 Aug, 2014

1 commit


13 Feb, 2014

3 commits


22 Jan, 2014

2 commits


20 Jan, 2014

1 commit


17 Jan, 2014

1 commit


14 Jan, 2014

1 commit


07 Jan, 2014

1 commit


28 Dec, 2013

1 commit

  • This is a bug fix. The existing code tries to kill many
    birds with one stone: Handling binding of actions to
    filters, new actions and replacing of action
    attributes. A simple test case to illustrate:

    XXXX
    moja@fe1:~$ sudo tc actions add action drop index 12
    moja@fe1:~$ actions get action gact index 12
    action order 1: gact action drop
    random type none pass val 0
    index 12 ref 1 bind 0
    moja@fe1:~$ sudo tc actions replace action ok index 12
    moja@fe1:~$ actions get action gact index 12
    action order 1: gact action drop
    random type none pass val 0
    index 12 ref 2 bind 0
    XXXX

    The above shows the refcounf being wrongly incremented on replace.
    There are more complex scenarios with binding of actions to filters
    that i am leaving out that didnt work as well...

    Signed-off-by: Jamal Hadi Salim
    Signed-off-by: David S. Miller

    Jamal Hadi Salim
     

21 Dec, 2013

1 commit

  • This patch fixes:
    1) pass mask rather than size to tcf_hashinfo_init()
    2) the cleanup should be in reversed order in mirred_cleanup_module()

    Reported-by: Eric Dumazet
    Fixes: 369ba56787d7469c0afd ("net_sched: init struct tcf_hashinfo at register time")
    Cc: Eric Dumazet
    Cc: David S. Miller
    Signed-off-by: Cong Wang
    Signed-off-by: Jamal Hadi Salim
    Signed-off-by: David S. Miller

    WANG Cong
     

20 Dec, 2013

1 commit


19 Dec, 2013

2 commits


06 Dec, 2013

1 commit


21 Sep, 2013

1 commit

  • Add an extra u64 rate parameter to psched_ratecfg_precompute()
    so that some qdisc can opt-in for 64bit rates in the future,
    to overcome the ~34 Gbits limit.

    psched_ratecfg_getrate() reports a legacy structure to
    tc utility, so if actual rate is above the 32bit rate field,
    cap it to the 34Gbit limit.

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     

03 Jun, 2013

1 commit

  • commit 56b765b79 ("htb: improved accuracy at high rates")
    broke the "overhead xxx" handling, as well as the "linklayer atm"
    attribute.

    tc class add ... htb rate X ceil Y linklayer atm overhead 10

    This patch restores the "overhead xxx" handling, for htb, tbf
    and act_police

    The "linklayer atm" thing needs a separate fix.

    Reported-by: Jesper Dangaard Brouer
    Signed-off-by: Eric Dumazet
    Cc: Vimalkumar
    Cc: Jiri Pirko
    Signed-off-by: David S. Miller

    Eric Dumazet
     

13 Feb, 2013

2 commits

  • Current act_police uses rate table computed by the "tc" userspace
    program, which has the following issue:

    The rate table has 256 entries to map packet lengths to token (time
    units). With TSO sized packets, the 256 entry granularity leads to
    loss/gain of rate, making the token bucket inaccurate.

    Thus, instead of relying on rate table, this patch explicitly computes
    the time and accounts for packet transmission times with nanosecond
    granularity.

    This is a followup to 56b765b79e9a78dc7d3f8850ba5e5567205a3ecd
    ("htb: improved accuracy at high rates").

    Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Jiri Pirko
     
  • It's not used anywhere else, so move it.

    Signed-off-by: Jiri Pirko
    Acked-by: Jamal Hadi Salim
    Acked-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Jiri Pirko
     

15 Jan, 2013

1 commit

  • Eric Dumazet pointed out that act_mirred needs to find the current net_ns,
    and struct net pointer is not provided in the call chain. His original
    patch made use of current->nsproxy->net_ns to find the network namespace,
    but this fails to work correctly for userspace code that makes use of
    netlink sockets in different network namespaces. Instead, pass the
    "struct net *" down along the call chain to where it is needed.

    This version removes the ifb changes as Eric has submitted that patch
    separately, but is otherwise identical to the previous version.

    Signed-off-by: Benjamin LaHaise
    Tested-by: Eric Dumazet
    Acked-by: Jamal Hadi Salim
    Signed-off-by: David S. Miller

    Benjamin LaHaise
     

02 Apr, 2012

1 commit


06 Jul, 2011

1 commit


08 May, 2011

2 commits