Shapers aren't working as expected in VYOS 1.2.6

Running: VyOS 1.2.6
On a: Edgecore SAF51015I

The traffic shapers don’t seem to be working as I expected them to, my current set up is a WAN network 192.168.100.0/24 (this is actually a public address range however I’ve changed this to an RFC1918 range for this example), I have multiple customer edge devices facing this layer 2 network which ultimately connects to the EdgeCore. Each of these customers within this WAN network have their own bandwidth requirements and are assigned a single public IP to be used on their edge devices. I have shapers applied to individual customer edge device IPs so that I can implement these bandwidth requirements e.g.

  • CUST 1 will have an edge device with a WAN IP of 192.168.100.10 and bandwidth requirements of 500Mbps upload and download
  • CUST 2 will have an edge device with a WAN IP of 192.168.100.11 and bandwidth requirements of 50Mbs upload and download
  • CUST 3 will have an edge device with a WAN IP of 192.168.100.12 and bandwidth requirements of 500Mbps upload and download

My shaper / interface config is as follows:

interfaces {
    ethernet eth10 {
        hw-id 04:f8:f8:7b:f9:ee
        vif 400 {
            address 192.168.100.1/24
            description "PUBLICIPBLOCK"
            firewall {
                in {
                    name CUST_PUBLICIP_IN
                }
                local {
                    name CUST_LOCAL
                }
            }
            redirect ifb400
            traffic-policy {
                out 'public-custs'
            }
        }
	}
    input ifb400 {
        traffic-policy {
            out 'public-custs'
        }
    }
}

traffic-policy {
    shaper public-custs {
        bandwidth 10gbit
        class 2 {
            description CUST1
            bandwidth 500mbit
            burst 15k
            match dst {
                ip {
                    destination {
                        address 192.168.100.10/32
                    }
                }
            }
            match src {
                ip {
                    source {
                        address 192.168.100.10/32
                    }
                }
            }
            queue-type fair-queue
        }
        class 3 {
            description CUST2
            bandwidth 50mbit
            burst 15k
            match dst {
                ip {
                    destination {
                        address 192.168.100.11/32
                    }
                }
            }
            match src {
                ip {
                    source {
                        address 192.168.100.11/32
                    }
                }
            }
            queue-type fair-queue
        }
        class 4 {
            description CUST3
            bandwidth 500mbit
            burst 15k
            match dst {
                ip {
                    destination {
                        address 192.168.100.12/32
                    }
                }
            }
            match src {
                ip {
                    source {
                        address 192.168.100.12/32
                    }
                }
            }
            queue-type fair-queue
        }
    }
}

The symptoms I’m seeing are the upload speeds seem absolutely fine however the download speeds are sporadic. Say if I set a 500Mbps shaper, I’ll see the 500Mbps upload speed when running a speed test from the LAN behind the customer edge however the download will be max 200Mbps or as low as 5Mbps these symptoms are consistent over all public IP WAN customers.

Here is an output of: show queuing ethernet eth10 vif 400 As you can see below, there are some pretty suspect results.

eth10.400 Queueing:
Class      Policy                   Sent      Dropped    Overlimit      Backlog
root       shaper           280838190130       184204     66251639            0
2          fair-queue                  0            0            0            0
3          fair-queue         5691694880        16111            0            0
4          fair-queue       133955295865        63401            0            0
5          fair-queue        72691877506        84370            0            0
6          fair-queue          760924256          212            0            0
7          fair-queue        63167487700        16545            0            0
8          fair-queue         3674176611         3315            0            0
9          fair-queue                  0            0            0            0
10         fair-queue                  0            0            0            0
11         fair-queue                  0            0            0            0
12         fair-queue          883770508          250            0            0
default    fair-queue           12962750            0            0            0
65521      limiter           17301225591            0            0            0

Is there anything in my config which is incorrect? Ultimately my goal is to apply symmetrical traffic shaping (upload and download) on a per IP (customer) basis. Or are there any bugs / caveats with the version of VyOS which could explain this?

Any help would be much appreciated!!

Cheers,

Jimmy