summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ryu/services/protocols/bgp/info_base/base.py10
-rw-r--r--ryu/services/protocols/bgp/info_base/ipv4.py6
-rw-r--r--ryu/services/protocols/bgp/info_base/ipv6.py6
-rw-r--r--ryu/services/protocols/bgp/peer.py9
4 files changed, 24 insertions, 7 deletions
diff --git a/ryu/services/protocols/bgp/info_base/base.py b/ryu/services/protocols/bgp/info_base/base.py
index 16212705..79bba2cb 100644
--- a/ryu/services/protocols/bgp/info_base/base.py
+++ b/ryu/services/protocols/bgp/info_base/base.py
@@ -821,6 +821,8 @@ class Filter(object):
"""
__metaclass__ = ABCMeta
+ ROUTE_FAMILY = RF_IPv4_UC
+
POLICY_DENY = 0
POLICY_PERMIT = 1
@@ -978,7 +980,7 @@ class PrefixFilter(Filter):
"""
- return PrefixFilter(self.prefix,
- policy=self._policy,
- ge=self._ge,
- le=self._le)
+ return self.__class__(self.prefix,
+ policy=self._policy,
+ ge=self._ge,
+ le=self._le)
diff --git a/ryu/services/protocols/bgp/info_base/ipv4.py b/ryu/services/protocols/bgp/info_base/ipv4.py
index cf18c237..07cc8665 100644
--- a/ryu/services/protocols/bgp/info_base/ipv4.py
+++ b/ryu/services/protocols/bgp/info_base/ipv4.py
@@ -25,6 +25,7 @@ from ryu.services.protocols.bgp.info_base.base import Path
from ryu.services.protocols.bgp.info_base.base import Table
from ryu.services.protocols.bgp.info_base.base import Destination
from ryu.services.protocols.bgp.info_base.base import NonVrfPathProcessingMixin
+from ryu.services.protocols.bgp.info_base.base import PrefixFilter
LOG = logging.getLogger('bgpspeaker.info_base.ipv4')
@@ -83,3 +84,8 @@ class Ipv4Path(Path):
super(Ipv4Path, self).__init__(*args, **kwargs)
from ryu.services.protocols.bgp.info_base.vrf4 import Vrf4Path
self.VRF_PATH_CLASS = Vrf4Path
+
+
+class Ipv4PrefixFilter(PrefixFilter):
+ """IPv4 Prefix Filter class"""
+ ROUTE_FAMILY = RF_IPv4_UC
diff --git a/ryu/services/protocols/bgp/info_base/ipv6.py b/ryu/services/protocols/bgp/info_base/ipv6.py
index 01d68bb4..5c1cc75b 100644
--- a/ryu/services/protocols/bgp/info_base/ipv6.py
+++ b/ryu/services/protocols/bgp/info_base/ipv6.py
@@ -25,6 +25,7 @@ from ryu.services.protocols.bgp.info_base.base import Path
from ryu.services.protocols.bgp.info_base.base import Table
from ryu.services.protocols.bgp.info_base.base import Destination
from ryu.services.protocols.bgp.info_base.base import NonVrfPathProcessingMixin
+from ryu.services.protocols.bgp.info_base.base import PrefixFilter
LOG = logging.getLogger('bgpspeaker.info_base.ipv6')
@@ -83,3 +84,8 @@ class Ipv6Path(Path):
super(Ipv6Path, self).__init__(*args, **kwargs)
from ryu.services.protocols.bgp.info_base.vrf6 import Vrf6Path
self.VRF_PATH_CLASS = Vrf6Path
+
+
+class Ipv6PrefixFilter(PrefixFilter):
+ """IPv6 Prefix Filter class"""
+ ROUTE_FAMILY = RF_IPv6_UC
diff --git a/ryu/services/protocols/bgp/peer.py b/ryu/services/protocols/bgp/peer.py
index 5b141991..b2b42175 100644
--- a/ryu/services/protocols/bgp/peer.py
+++ b/ryu/services/protocols/bgp/peer.py
@@ -487,6 +487,9 @@ class Peer(Source, Sink, NeighborConfListener, Activity):
blocked_cause = None
for filter_ in filters:
+ if filter_.ROUTE_FAMILY != path.ROUTE_FAMILY:
+ continue
+
policy, is_matched = filter_.evaluate(path)
if policy == PrefixFilter.POLICY_PERMIT and is_matched:
block = False
@@ -1352,7 +1355,7 @@ class Peer(Source, Sink, NeighborConfListener, Activity):
self._adj_rib_in[nlri_str] = received_route
self._signal_bus.adj_rib_in_changed(self, received_route)
- if block:
+ if not block:
# Update appropriate table with withdraws.
tm = self._core_service.table_manager
tm.learn_path(w_path)
@@ -1444,7 +1447,7 @@ class Peer(Source, Sink, NeighborConfListener, Activity):
self._adj_rib_in[nlri_str] = received_route
self._signal_bus.adj_rib_in_changed(self, received_route)
- if block:
+ if not block:
if msg_rf == RF_RTC_UC \
and self._init_rtc_nlri_path is not None:
self._init_rtc_nlri_path.append(new_path)
@@ -1508,7 +1511,7 @@ class Peer(Source, Sink, NeighborConfListener, Activity):
self._adj_rib_in[nlri_str] = received_route
self._signal_bus.adj_rib_in_changed(self, received_route)
- if block:
+ if not block:
# Update appropriate table with withdraws.
tm = self._core_service.table_manager
tm.learn_path(w_path)