1# Copyright (C) 2014 Nippon Telegraph and Telephone Corporation.
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#    http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
12# implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16"""
17 Defines data types and models required specifically for VPNv6 support.
18"""
19
20import logging
21
22from ryu.lib.packet.bgp import IP6AddrPrefix
23from ryu.lib.packet.bgp import RF_IPv6_VPN
24
25from ryu.services.protocols.bgp.info_base.vpn import VpnDest
26from ryu.services.protocols.bgp.info_base.vpn import VpnPath
27from ryu.services.protocols.bgp.info_base.vpn import VpnTable
28
29LOG = logging.getLogger('bgpspeaker.info_base.vpnv6')
30
31
32class Vpnv6Dest(VpnDest):
33    """VPNv6 destination
34
35    Stores IPv6 paths.
36    """
37    ROUTE_FAMILY = RF_IPv6_VPN
38
39
40class Vpnv6Table(VpnTable):
41    """Global table to store VPNv6 routing information
42
43    Uses `Vpnv6Dest` to store destination information for each known vpnv6
44    paths.
45    """
46    ROUTE_FAMILY = RF_IPv6_VPN
47    VPN_DEST_CLASS = Vpnv6Dest
48
49
50class Vpnv6Path(VpnPath):
51    """Represents a way of reaching an VPNv4 destination."""
52    ROUTE_FAMILY = RF_IPv6_VPN
53    VRF_PATH_CLASS = None  # defined in init - anti cyclic import hack
54    NLRI_CLASS = IP6AddrPrefix
55
56    def __init__(self, *args, **kwargs):
57        super(Vpnv6Path, self).__init__(*args, **kwargs)
58        from ryu.services.protocols.bgp.info_base.vrf6 import Vrf6Path
59        self.VRF_PATH_CLASS = Vrf6Path
60