summaryrefslogtreecommitdiffstats
path: root/pbrd/pbr_vty.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* pbrd: Allow autocompletion for pbr-map PBRMAPDonald Sharp2019-06-051-3/+22
| | | | | | Allow the end user to auto-complete the pbr-map name. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* lib, pbrd, sharpd, vtysh: Add autocompletion for 'nexthop-group'Donald Sharp2019-06-051-1/+1
| | | | | | Add some auto-completion for the nexthop-group command Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* Merge pull request #3776 from opensourcerouting/pbrd-interface-nexthopsDonald Sharp2019-03-221-40/+48
|\ | | | | pbrd: add support for interface nexthops
| * lib, pbrd: fix indentation of a few commandsRenato Westphal2019-02-151-4/+4
| | | | | | | | | | | | | | When displaying the running configuration, we should use a single space to indent commands when necessary (and not two spaces). Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
| * pbrd: change the "set nexthop" command to accept interface nexthopsRenato Westphal2019-02-151-36/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | In addition to nexthop groups, pbrd also supports the "set nexthop" command to specify the nexthop of a PBR map. This adds convenience when multiple nexthops aren't necessary. Change this command to support interface nexthops (without IP addresses) like nexthop groups do. At the end of the command, call pbr_nht_nexthop_interface_update() otherwise the interface nexthop won't be validated until we receive an interface up/down notification from zebra through the zapi protocol. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
* | pbrd: add missing newline at the end of warning messageRenato Westphal2019-02-211-1/+1
| | | | | | | | Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
* | pbrd: If changing policy on an interface be careful what you ask forDonald Sharp2019-02-131-2/+14
|/ | | | | | | | | | | | | | | | | | | When changing policy on an interface, only delete the old_pbrm if it is different than the current, this covers the case: current config: int swp1 pbr-policy DONNA To a config entered of: int swp1 pbr-policy EVA Additionally there is no need to reinstall if we enter the same pbr-policy two times in a row. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* lib, vtysh: fix inconsistent interface commands in vtyshRenato Westphal2018-08-131-0/+3
| | | | | | | | | | | | | | | | | The definition of the interface commands in vtysh.c were outdated. Currently, all daemons that call if_cmd_init() will have the "no interface IFNAME" command and the "[no] description" commands as well, so there's no need to define exceptions for these commands anymore. To fix this, make extract.pl parse the if.c file so that vtysh can get the interface commands from there automatically. Only the "interface IFNAME [vrf NAME]" must be kept in vtysh.c because it changes the vty node and thus needs special treatment. Finally, make pimd and pbrd display interface descriptions on "sh run" when they are configured. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
* pbrd: add logging messages when out of table id'sQuentin Young2018-06-131-2/+3
| | | | | | | * Add log messages to indicate when we have run out of table IDs * Increase minimum range size to 1000 to reduce risk of hitting this Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
* pbrd, lib: move PBR_STR def. to libQuentin Young2018-06-131-0/+1
| | | | | | Per request Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
* pbrd: use PBR_STRQuentin Young2018-06-121-6/+6
| | | | Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
* pbrd: remove json optionsQuentin Young2018-06-121-10/+6
| | | | Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
* pbrd: allow configurable table id rangeQuentin Young2018-06-121-2/+28
| | | | Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
* pbrd: Fix compilation warn -> errorDonald Sharp2018-05-151-2/+2
| | | | | | | | | The buffer size was insufficiently sized to hold the entirety of the data being passed in. Modify the nht code to use a bit bigger buffer. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pbrd, vtysh: Limit range to actual 1-700Donald Sharp2018-05-091-2/+2
| | | | | | | | | The range for sequence numbers needs to be limited by the range we have currently choosen for rule ranges. Ticket: CM-20562 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pbrd: Fix nearly impossible truncationDonald Sharp2018-05-031-2/+2
| | | | | | | | | | | | | | | | Since we are writing into the name field which is PBR_MAP_NAMELEN size, we are expecting this to field to be at max 100 bytes. Newer compilers understand that the %s portion may be up to 100 bytes( because of the size of the string. The %u portion is expected to be 10 bytes. So in `theory` there are situations where we might truncate. The reality this is never going to happen( who is going to create a nexthop group name that is over say 30 characters? ). As such we are expecting the calling function to subtract 10 from the size_t l before we pass it in to get around this new gcc fun. Fixes: #2163 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pbrd: Fix a couple SA issuesDonald Sharp2018-04-241-0/+5
| | | | | | | | | | | | 1) addr will never be non-null because of the way we build the cli at this point in time, but the SA system does not understand this, add a bread crumb for it. 2) Fix a possible memory leak of the pbr_ifp 3) Fix possible integer overflow when bit shifting. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* Merge pull request #2051 from donaldsharp/PBRD_EXTRARuss White2018-04-201-4/+66
|\ | | | | Pbrd extra
| * pbrd: move debug vty into pbr_vty.cQuentin Young2018-04-181-2/+58
| | | | | | | | | | | | Dev docs say that CLI goes in _vty.c files Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
| * pbrd, zebra: Fix multiple pbr-policy installDonald Sharp2018-04-181-1/+1
| | | | | | | | | | | | | | | | | | | | | | Somewhere along the way the ability to install multiple pbr-policys for the same pbr-map was lost. Add this back. There is a limitation in that we are limited to 64 interfaces per pbr-policy. Ticket: CM-20429 Signed-off-by: Donald Sharp sharpd@cumulusnetworks.com>
| * lib, pbrd: Do not allow v6 LL nexthops to be specified without an interface.Donald Sharp2018-04-181-1/+7
| | | | | | | | | | | | | | | | Prevent the creation of a v6 LL nexthop that does not include an interface for proper resolution. Ticket: CM-20276 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* | pbrd: remove pbr-policy resource leakQuentin Young2018-04-181-4/+5
| | | | | | | | | | | | | | | | Removing a non-existent pbr-policy caused a pbr_interface to leak. Coverity #1467829 Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
* | pbrd: remove unsafe string copyQuentin Young2018-04-181-16/+9
|/ | | | | | | | | | A user could overflow the pbr_ifp->mapname buffer by entering a pbr-map name longer than 100 characters. Coverity #1467821 Coverity #1467821 Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
* pbrd: adjust/remove the rule correctly when dst and/or src removedDon Slice2018-04-061-0/+4
| | | | | | | | | When the last match criteria was removed (dst-ip or src-ip), we were not deleting the rule correctly for ipv6. This fix retains the needed src-ip/dst-ip during the pbr_send_pbr_map process so the appropriate information is available for the rule delete. Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
* pbrd: Remove table and rule range commandsDonald Sharp2018-04-061-40/+0
| | | | | | | | | | | Since PBR is meant to be for small deployments, allowing end users to arbitrarily change rule and table ranges without some more careful thought on what is going on and how to do it, sets us up for issues. At this time remove these knobs. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pbrd: Indicate command failure a bit betterDonald Sharp2018-04-061-9/+9
| | | | | | | | | When a command is attempted to be configed and it fails to be installed, indicate via vtysh return codes that we did not accept the command Ticket: CM-20216 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pbrd: Do not use vrf_frame for pbrms displayDonald Sharp2018-04-061-2/+2
| | | | | | | | | When displaying a pbr map sequence for a show run do not use the vty_frame construct. We should display the config even if we do not have much to display. Ticket: CM-20196 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pbrd: Reduce range so we cannot go over the vrf ruleDonald Sharp2018-04-061-1/+1
| | | | | | | | | The linux kernel puts the vrf rule at 1000, since pbr rules need to be before this rule, don't allow us to go beyond. Ticket: CM-19946 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pbrd: Prevent crash from partially configured interfaceDonald Sharp2018-04-061-0/+3
| | | | | | | If an interface is in the process of coming up or partially deconfigured, prevent pbrd from crashing Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pbrd: If we get the same prefix safely ignoreDonald Sharp2018-04-061-0/+6
| | | | | | | | If the match src-ip or dst-ip command entered has already been received and it's the same prefix, we are done and do not need to do anything more. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* lib, pbrd: rm extra space when displaying nexthopQuentin Young2018-04-061-4/+3
| | | | Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
* pbrd: Only allow one nexthop group or nexthop at a timeDonald Sharp2018-04-061-0/+6
| | | | | | | | | When we are entering 'set nexthop' and 'set nexthop-group' ensure that the cli only allows one of these to happen at a time. Ticket: CM-20125 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pbrd: Remove pbr_eventsDonald Sharp2018-04-061-43/+22
| | | | | | | | | | | | | | | | | | | The pbr_events.c file was a mistake in that it overly complicated the code and made it hard to think about what was happening. Remove all the events and just do the work where needed. Additionally rethink the sending of the pbr map to zebra and only send one notification at a time instead of having the sending function attempt to figure out what to do. Clean up some of the no form of commands to make them work properly. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com> Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com> Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
* pbrd: Cleanup CI warningsDonald Sharp2018-04-061-10/+7
| | | | | | There are a bunch of CI warnings that need to be cleaned up. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* pbrd: Add PBR to FRRDonald Sharp2018-04-061-0/+631
This is an implementation of PBR for FRR. This implemenation uses a combination of rules and tables to determine how packets will flow. PBR introduces a new concept of 'nexthop-groups' to specify a group of nexthops that will be used for ecmp. Nexthop-groups are specified on the cli via: nexthop-group DONNA nexthop 192.168.208.1 nexthop 192.168.209.1 nexthop 192.168.210.1 ! PBR sees the nexthop-group and installs these as a default route with these nexthops starting at table 10000 robot# show pbr nexthop-groups Nexthop-Group: DONNA Table: 10001 Valid: 1 Installed: 1 Valid: 1 nexthop 192.168.209.1 Valid: 1 nexthop 192.168.210.1 Valid: 1 nexthop 192.168.208.1 I have also introduced the ability to specify a table in a 'show ip route table XXX' to see the specified tables. robot# show ip route table 10001 Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, P - PIM, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR, > - selected route, * - FIB route F>* 0.0.0.0/0 [0/0] via 192.168.208.1, enp0s8, 00:14:25 * via 192.168.209.1, enp0s9, 00:14:25 * via 192.168.210.1, enp0s10, 00:14:25 PBR tracks PBR-MAPS via the pbr-map command: ! pbr-map EVA seq 10 match src-ip 4.3.4.0/24 set nexthop-group DONNA ! pbr-map EVA seq 20 match dst-ip 4.3.5.0/24 set nexthop-group DONNA ! pbr-maps can have 'match src-ip <prefix>' and 'match dst-ip <prefix>' to affect decisions about incoming packets. Additionally if you only have one nexthop to use for a pbr-map you do not need to setup a nexthop-group and can specify 'set nexthop XXXX'. To apply the pbr-map to an incoming interface you do this: interface enp0s10 pbr-policy EVA ! When a pbr-map is applied to interfaces it can be installed into the kernel as a rule: [sharpd@robot frr1]$ ip rule show 0: from all lookup local 309: from 4.3.4.0/24 iif enp0s10 lookup 10001 319: from all to 4.3.5.0/24 iif enp0s10 lookup 10001 1000: from all lookup [l3mdev-table] 32766: from all lookup main 32767: from all lookup default [sharpd@robot frr1]$ ip route show table 10001 default proto pbr metric 20 nexthop via 192.168.208.1 dev enp0s8 weight 1 nexthop via 192.168.209.1 dev enp0s9 weight 1 nexthop via 192.168.210.1 dev enp0s10 weight 1 The linux kernel now will use the rules and tables to properly apply these policies. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com> Signed-off-by: Don Slice <dslice@cumulusnetworks.com> Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>