Commit Graph

2745 Commits

Author SHA1 Message Date
Philippe Guibert
cfaf18ce52 bgpd: support for enumerate pkt len
The packet length can be injected from fs entry with an enumerate list;
the negation of the value is also taken into account.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 11:08:58 +02:00
Philippe Guibert
56707a36d0 bgpd: introduce recursive operations for or flowspec operations
So as to add or remove entries with flowspec or operations like tcp
flags or dscp enum list, a mechanism is put in place that adds
recursivity.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 11:08:58 +02:00
Philippe Guibert
3570399857 bgpd: enumerate support for dscp values
If one dscp value or an enumerate list of or values of dscp are
provided, then the bgp pbr entries created will take into account the
dscp values.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 11:08:58 +02:00
Philippe Guibert
4977bd6c19 *: add flowspec dscp handling
Only one dscp value is accepted as filtering option.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 11:08:55 +02:00
Philippe Guibert
9bba145596 bgpd: add a parameter to handle param or combinations
Before adding/removing to zebra, flowspec entries parses the list of
combinations or avaialble and creates contexts in order to be injected
to zebra.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 08:52:15 +02:00
Philippe Guibert
c5ee26cccb bgpd: use a bgp_pbr_or_filter structure to host tcpflags combinations
tcp flags combinations ( or enumerates)  are hosted in a structure that
will be analysed later, when wanting to inject that information to
zebra.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 08:52:15 +02:00
Philippe Guibert
f7b2e630e4 bgpd: extend enumerate API to handle or operations
The flowspec enumerate list can either be and values or or values.
In the latter case, a list is created that will be used later.
Also, the API supports the check for both and or or operations. This API
does not permit to handle both and and or operations at the same time.
The list will have to be either and or or. An other API retrieves the
operator unary value that is used: and or or. or 0 is the two operators
are used at the same time.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 08:52:15 +02:00
Philippe Guibert
1a1f4a4c69 bgpd: do not add default route for flowspec for each FS entry
Because the Flowspec entries are parsed first, then injected to Zebra,
there are cases where the install feedback from zebra is not received.
This leads to unnecessary add route events, whereas one should be
enough.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 08:52:15 +02:00
Philippe Guibert
2e1f721e65 bgpd, lib: share flags values for iptable configuration
Those flags can be shared between BGP and Zebra. That is why
those flags are moved to common pbr.h header file.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 08:52:15 +02:00
Philippe Guibert
2da7d62e94 bgpd: support for flowspec tcp flags
Ability to handle flowspec tcp flags.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 08:52:15 +02:00
Philippe Guibert
01ffd28b8d bgpd: fix display with flowspec tcp flags option
When displaying RIB FS summary, the TCP option is not displayed.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 08:52:15 +02:00
Philippe Guibert
0e867886a7 bgpd: simplify API in BGP policy-routing to handle Flowspec
To handle FS params between FS RIB and BGP PBR entities, a structure
intermediate named bgp_pbr_filter is used, and contains all filtering
information that was before passed as a parameter.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 08:52:15 +02:00
Philippe Guibert
538f0137f1 bgpd: add debug routine to display which PBR entry is handled
To know which entry is set/unset, a debug handler is present, that
displays which entry is injected/removed to/from zebra.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 08:52:15 +02:00
Philippe Guibert
83360720df bgpd: add support of bgp flowspec filtering per packet length
It is possible to do filtering based on packet length value or a range
of packet-length.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 08:52:15 +02:00
Philippe Guibert
932404b7b0 bgpd: handle ICMP type and code from flowspec
It is possible for flowspec entries containing ICMP rule to insert PBR
entries based on ICMP type and ICMP code.
Flowspec ICMP filtering can either have icmp type or icmp code or both.
Not all combinations are permitted:
- if icmp code is provided, then it is not possible to derive the
  correct icmp value. This will not be installed
- range of ICMP is authorised or list of ICMP, but not both.
- on receiving a list of ICMPtype/code, each ICMP type is attempted to
  be associated to ICMP code. If not found, then ICMPtype is combined
  with all known ICMP code values associated to that ICMP type.
- if a specific ICMP type/code is needed, despite the ICMP code/type
  combination does not exist, then it is possible to do it by forging a
  FS ICMP type/code specific for that.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 08:52:15 +02:00
Russ White
4bca4c6f0c
Merge pull request #2540 from LabNConsulting/working/master/bgp-twice-leaked-nht
bgpd: don't nexthop-track twice-leaked routes that came from zebra
2018-06-26 11:17:32 -04:00
Russ White
f1b5eeea03
Merge pull request #2545 from pacovn/Coverity_1468413_Explicit_null_dereferenced
bgpd: null check (Coverity 1468413)
2018-06-26 11:14:39 -04:00
Quentin Young
f07e1c4fe4 bgpd: remove DEFUN_DEPRECATED usage
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-25 16:38:48 +00:00
paco
867f0ccaec
bgpd: null check (Coverity 1468413)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-25 15:03:17 +02:00
G. Paul Ziemba
f46d45c17f bgpd: don't nexthop-track twice-leaked routes that came from zebra
Issue 2381: interface based routes not marked "up" when they originate
in zebra, redistributed to bgp vrf, then imported to vpn and then
imported by another vrf.

Routes that are redistributed into BGP from zebra should not get
nexthop tracking (the assumption is that the originating protocol
is responsible to export or withdraw the route according to its own
notion of nexthop status).

The vpn-vrf route-leaking code checks the source route sub_type to
decide whether to use nexthop tracking on the resulting leaked route.

A route that is redistributed from zebra into bgp will have
sub_type==BGP_ROUTE_REDISTRIBUTE. If it is leaked to the vpn RIB,
the resulting vpn RIB route will have sub_type==BGP_ROUTE_IMPORTED.
If THAT vpn route is leaked to another vrf, the original code will
examine only the leak-source route sub_type and, since it is
not BGP_ROUTE_REDISTRIBUTE, will wrongly try to use nexthop tracking
on the new route in the final vrf.

This change modifies the leak function to track back up the
parent links to the ultimate parent of the leak source route
and look at that route's sub_type instead.

Signed-off-by: G. Paul Ziemba <paulz@labn.net>
2018-06-24 13:04:05 -07:00
Quentin Young
0a8990d5f8
Merge pull request #2501 from pacovn/infer_unused1
bgpd isisd ldpd lib ospfd pimd: redundancy (infer, grouped)
2018-06-21 15:12:33 -04:00
Quentin Young
277781a778
Merge pull request #2518 from pacovn/Coverity_23106_Explicit_null_dereferenced
bgpd: null check (Coverity 23106)
2018-06-21 14:24:11 -04:00
Quentin Young
dfc5d40e91
Merge pull request #2519 from pacovn/Coverity_1399238_Logically_dead_code
bgpd: dead code (Coverity 1399238)
2018-06-21 14:20:48 -04:00
paco
990f4f9112
bgpd: null check (Coverity 1455380)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-21 18:51:52 +02:00
paco
d87ff2ddf4
bgpd: dead code (Coverity 1399238)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-21 17:22:55 +02:00
paco
e8a3a0a030
bgpd: null check (Coverity 23106)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-21 15:58:51 +02:00
Donald Sharp
50f08ff26a
Merge pull request #2507 from pacovn/Coverity_1436344_1451361_Dereference_after_null_check
bgpd, lib: null check (Coverity 1436344, 1451361)
2018-06-21 07:29:51 -04:00
Donald Sharp
07caaf613a
Merge pull request #2506 from pacovn/Coverity_1221453_1461297_Dereference_after_null_check
bgpd ospf6d: null check (Coverity 1221453 1461297)
2018-06-21 07:26:47 -04:00
paco
a2b6e694b1
bgpd isisd ldpd lib ospfd pimd: redundancy (infer)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-20 22:25:28 +02:00
paco
fa3016309b
bgpd, lib: null check (Coverity 1436344, 1451361)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-20 19:14:01 +02:00
paco
cac84a1611
bgpd ospf6d: null check (Coverity 1221453 1461297) 2018-06-20 18:57:16 +02:00
Donald Sharp
76cd18c9dd
Merge pull request #2498 from pacovn/Coverity_1470098_Logically_dead_code
bgpd: json output fix (Coverity 1470098)
2018-06-20 11:39:07 -04:00
paco
06e8964464
bgpd: json output fix (Coverity 1470098)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-20 15:43:19 +02:00
Russ White
480f71f6a8
Merge pull request #2461 from pacovn/Coverity_1399380_Untrusted_value_as_argument
bgpd: Untrusted argument (Coverity 1399380)
2018-06-20 07:41:06 -04:00
Russ White
96be948bcd
Merge pull request #2495 from pacovn/fixme_all_digit
bgpd, lib, ospfd, zebra: all_digit moved to frrstr
2018-06-20 07:38:19 -04:00
Donald Sharp
46a69f10c0 bgpd, lib, zebra: Remove unnecessary return
The route_map_walk_update_list callback function
never uses the return code, so just remove it.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-19 21:22:46 -04:00
Donald Sharp
7096e93875 bgpd, lib, pimd: Remove unused variable.
route_map_mark_updated has a `int del_later` variable
that is passed in but never used.  Just remove it.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-19 20:44:15 -04:00
paco
5d5ba0185d
bgpd, lib, ospfd, zebra: all_digit moved to frrstr
This solves a pending FIXME

Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-19 17:59:53 +02:00
paco
f96f689940
bgpd: Untrusted argument (Coverity 1399380)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-19 15:00:25 +02:00
Russ White
05d7e026c8
Merge pull request #2445 from ppmathis/feature/bgp-pg-overrides
bgpd: Improve peer-group override implementation
2018-06-19 08:20:31 -04:00
Russ White
4a1f626570
Merge pull request #2450 from ppmathis/bugfix/bgp-filtered-routes
bgpd: Fix crash when showing filtered routes
2018-06-19 07:37:42 -04:00
Russ White
fc89ac9846
Merge pull request #2470 from chiragshah6/mdev
zebra: Hide default vrf instance of l3vni cmd
2018-06-19 07:29:13 -04:00
Russ White
e3ea4f7acb
Merge pull request #2478 from pacovn/Coverity_1408766_Dereference_after_null_check
bgpd: null check (Coverity 1408766)
2018-06-19 07:21:42 -04:00
Russ White
f071d8b36a
Merge pull request #2481 from pacovn/security_vpn_null_check
bgpd: vpn null check
2018-06-19 07:19:00 -04:00
Russ White
9635a16a36
Merge pull request #2483 from pacovn/clang_scan_bgpd_updgrp_deref
bgpd: null check (Clang scan-build)
2018-06-19 07:18:13 -04:00
Lou Berger
ed892e530d
Merge pull request #2476 from pacovn/Coverity_1433544_Explicit_null_dereferenced
bgpd: null check (Coverity 1433544, 1433543, 1433542)
2018-06-18 16:59:26 -04:00
Donald Sharp
b5e3687b1d
Merge pull request #2482 from pacovn/clang_scan_bgpd_bgp_rpki_deref
bgpd: null check (Clang scan-build)
2018-06-18 16:09:56 -04:00
paco
d3e51db069
bgpd: null check (Clang scan-build)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-18 21:37:35 +02:00
Donald Sharp
c0662bb478
Merge pull request #2417 from pacovn/Coverity_1399373_Structurally_dead_code
bgpd: dead code (Coverity 1399373)
2018-06-18 14:29:27 -04:00
paco
18b91526fa
bgpd: null check (Clang scan-build)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-18 16:27:02 +02:00