Vincent - Vipin and I are working on breaking the patch up now to get the data structures in place upstream. Hopefully in the next week or so.
Sami - The code will just work if there is no kernel vrf support, ie everything will just be in the default vrf. I'm not aware of any work being done in this regards on freebsd, but that doesn't mean anything because I'm not plugged into that community. The process should be the same, though from Quagga's perspective donald On Fri, Jan 8, 2016 at 7:27 AM, Sami Halabi <[email protected]> wrote: > hi, > great work. > is this work supported in freebsd? i noticed you mentioned netlink wixh is > linux soecific. > > Sami > בתאריך 8 בינו׳ 2016 11:04 AM, "Vincent JARDIN" <[email protected]> > כתב: > > It looks good. Which patch serie to check? >> Le 8 janv. 2016 07:09, "Vipin Kumar" <[email protected]> a >> écrit : >> >>> Significant progress has been made on this project. I had sent a few >>> emails to quagga-dev outlining the approach for this project -- to leverage >>> current VRF lib and BGP multi-instance support. We had a fruitful >>> discussion about that and the config model as well. >>> >>> Will be sending the changes(with explanations) to the data-structures >>> like vrf, zebra_vrf and interface soon. And also some of the new >>> trees/lists that were needed to keep vrf (devices) within a name-space, >>> take care of forward-referencing of VRFs, and deal with challenges >>> associated with address notifications via netlink, etc. >>> >>> Created a new data-structure zebra_ns, so that name-space and vrf device >>> models don't just co-exist, but also work in hierarchical way to possibly >>> scale the number of vrfs/instances further. >>> >>> All the configuration/show/clear is by vrf-device name, implementation >>> however internally still uses the vrf-id for efficiency reasons. vrf-device >>> index generated by the kernel is used as the vrf-id. >>> >>> We will also release/submit patches with descriptions in incremental >>> (logical) batches as testing/sanities progress and clears. >>> >>> For now, here are some actual outputs based on the current >>> implementation of this project. >>> >>> *1. Sample Running config* >>> >>> bgp multiple-instance >>> ! >>> ! >>> interface swp1 vrf boo >>> link-detect >>> ! >>> interface swp2 vrf foo >>> link-detect >>> ! >>> interface swp3 vrf zoo >>> link-detect >>> ! >>> vrf boo >>> ! >>> vrf foo >>> ! >>> vrf zoo >>> ! >>> router bgp 65001 vrf boo >>> neighbor 11.0.0.2 remote-as 65001 >>> address-family ipv4 unicast >>> redistribute static >>> neighbor 11.0.0.2 activate >>> exit-address-family >>> ! >>> router bgp 65001 vrf foo >>> neighbor 11.0.1.2 remote-as 65001 >>> address-family ipv4 unicast >>> redistribute static >>> neighbor 11.0.1.2 activate >>> exit-address-family >>> ! >>> router bgp 65001 vrf zoo >>> neighbor 11.0.2.2 remote-as 65001 >>> address-family ipv4 unicast >>> redistribute static >>> neighbor 11.0.2.2 activate >>> exit-address-family >>> ! >>> ip route 10.10.10.10/32 Null0 vrf boo >>> ip route 11.11.11.11/32 Null0 vrf foo >>> ip route 12.12.12.12/32 Null0 vrf zoo >>> ! >>> >>> >>> >>> *2. New config modes* >>> >>> * Global VRF* >>> >>> r1(config)#? >>> .. >>> vrf Select a VRF to configure >>> .. >>> r1(config)# vrf >>> NAME VRF's name >>> r1(config)# vrf foo >>> <cr> >>> r1(config)# vrf foo >>> r1(config-vrf)# >>> >>> Note: This mode works just the way it is for interfaces, i.e. quagga can >>> hold the config and (in future) commands within it, VRF becomes active >>> (usable by protocols BGP, static, ..) only after its been created in kernel >>> and learnt by quagga via netlink interface. >>> >>> >>> * Interface VRF* >>> >>> >>> r1(config)# interface swp2 >>> <cr> >>> vrf Specify the VRF >>> r1(config)# interface swp2 vrf >>> NAME The VRF name >>> r1(config)# interface swp2 vrf foo >>> <cr> >>> r1(config)# interface swp2 vrf foo >>> r1(config-if)# >>> >>> >>> * BGP VRF* >>> >>> r1(config)# router bgp 65001 >>> <cr> >>> view BGP view >>> vrf BGP VRF >>> r1(config)# router bgp 65001 vrf >>> WORD View/VRF name >>> r1(config)# router bgp 65001 vrf foo >>> r1(config-router)# >>> >>> >>> Note: BGP VRF instances (struct bgp) have some state of their >>> own now.Which comes handy as and when VRF creation/deletion is >>> learnt by BGP via zebra api. >>> bgp_create() -> bgp_instance_up() -> >>> bgp_instance_down() ->bgp_delete () >>> >>> When BGP instance is configured as view, it will act >>> in view mode just like it used to. >>> Introduced instance type - view or vrf, so >>> implementation can differentiate as needed. >>> >>> *3. Sample (of a few) show commands* >>> >>> *r1# show vrf* >>> vrf boo id 7 table 10 >>> vrf foo id 8 table 11 >>> vrf zoo id 9 table 12 >>> r1# >>> >>> *r1# show interface vrf foo* >>> Interface swp2 is up, line protocol is up >>> PTM status: disabled >>> vrf: 8 >>> Description: r3 >>> index 4 metric 0 mtu 1500 >>> flags: <UP,BROADCAST,RUNNING,MULTICAST> >>> HWaddr: 00:02:00:00:00:0a >>> inet 11.0.1.1/24 >>> inet6 fe80::202:ff:fe00:a/64 >>> ND advertised reachable time is 0 milliseconds >>> ND advertised retransmit interval is 0 milliseconds >>> ND router advertisements are sent every 600 seconds >>> ND router advertisements lifetime tracks ra-interval >>> ND router advertisement default router preference is medium >>> Hosts use stateless autoconfig for addresses. >>> >>> >>> *r1# show ip bgp vrf foo summary* >>> BGP router identifier 11.0.1.1, local AS number 65001 vrf-id 8 >>> BGP table version 5 >>> RIB entries 9, using 1080 bytes of memory >>> Peers 1, using 16 KiB of memory >>> >>> Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down >>> State/PfxRcd >>> r3(11.0.1.2) 4 65001 134 135 0 0 0 00:06:37 >>> 4 >>> >>> Total number of neighbors 1 >>> r1# >>> >>> *r1# show ip bgp vrf foo* >>> BGP table version is 5, local router ID is 11.0.1.1 >>> Status codes: s suppressed, d damped, h history, * valid, > best, = >>> multipath, >>> i internal, r RIB-failure, S Stale, R Removed >>> Origin codes: i - IGP, e - EGP, ? - incomplete >>> >>> Network Next Hop Metric LocPrf Weight Path >>> *>i11.0.1.0/24 11.0.1.2 0 100 0 i >>> *>i11.0.5.0/24 11.0.1.2 0 100 0 i >>> *>i11.0.7.0/24 11.0.1.2 0 100 0 i >>> *>i11.0.8.0/24 11.0.1.2 0 100 0 i >>> *> 11.11.11.11/32 0.0.0.0 0 32768 ? >>> >>> Total number of prefixes 5 >>> >>> *r1# show ip nht vrf boo* >>> 11.0.0.2 >>> resolved via connected >>> is directly connected, unknown >>> Client list: bgp(fd 16) >>> *r1# show ip nht vrf foo* >>> 11.0.1.2 >>> resolved via connected >>> is directly connected, unknown >>> Client list: bgp(fd 16) >>> *r1# show ip nht vrf zoo* >>> 11.0.2.2 >>> resolved via connected >>> is directly connected, unknown >>> Client list: bgp(fd 16) >>> >>> >>> *r1# show ip route vrf boo* >>> Codes: K - kernel route, C - connected, S - static, R - RIP, >>> O - OSPF, I - IS-IS, B - BGP, A - Babel, T - Table, >>> > - selected route, * - FIB route >>> >>> S>* 10.10.10.10/32 [1/0] [vrf 7] is directly connected, Null0, bh >>> B 11.0.0.0/24 [200/0] [vrf 7] via 11.0.0.2 inactive, 00:54:49 >>> C>* 11.0.0.0/24 [vrf 7] is directly connected, swp1 >>> B>* 11.0.4.0/24 [200/0] [vrf 7] via 11.0.0.2, swp1, 00:54:49 >>> B>* 11.0.7.0/24 [200/0] [vrf 7] via 11.0.0.2, swp1, 00:54:49 >>> B>* 11.0.9.0/24 [200/0] [vrf 7] via 11.0.0.2, swp1, 00:54:49 >>> >>> *r1# show ip route vrf foo* >>> Codes: K - kernel route, C - connected, S - static, R - RIP, >>> O - OSPF, I - IS-IS, B - BGP, A - Babel, T - Table, >>> > - selected route, * - FIB route >>> >>> B 11.0.1.0/24 [200/0] [vrf 8] via 11.0.1.2 inactive, 00:07:50 >>> C>* 11.0.1.0/24 [vrf 8] is directly connected, swp2 >>> B>* 11.0.5.0/24 [200/0] [vrf 8] via 11.0.1.2, swp2, 00:07:50 >>> B>* 11.0.7.0/24 [200/0] [vrf 8] via 11.0.1.2, swp2, 00:07:50 >>> B>* 11.0.8.0/24 [200/0] [vrf 8] via 11.0.1.2, swp2, 00:07:50 >>> S>* 11.11.11.11/32 [1/0] [vrf 8] is directly connected, Null0, bh >>> r1# >>> >>> >>> >>> *4. Steps to create a VRF device* >>> >>> ip link add dev boo type vrf table 10 >>> ip link set dev boo up >>> >>> *5. Steps to enslave an interface to a VRF device * >>> >>> >>> ip link set dev swp1 master boo >>> >>> >>> >>> _______________________________________________ >>> Quagga-dev mailing list >>> [email protected] >>> https://lists.quagga.net/mailman/listinfo/quagga-dev >>> >> >> _______________________________________________ >> Quagga-dev mailing list >> [email protected] >> https://lists.quagga.net/mailman/listinfo/quagga-dev >> >
_______________________________________________ Quagga-dev mailing list [email protected] https://lists.quagga.net/mailman/listinfo/quagga-dev
