FRRouting / frr

The FRRouting Protocol Suite
https://frrouting.org/
Other
3.21k stars 1.24k forks source link

EIGRP Support #275

Closed donaldsharp closed 7 years ago

donaldsharp commented 7 years ago

Add EIGRP to FRR

donaldsharp commented 7 years ago

Currently being worked:

https://github.com/donaldsharp/frr/tree/EIGRP

donaldsharp commented 7 years ago

This code forms neighbors and passes eigrp updates with routes around.

mTaleqani commented 7 years ago

hi Donald. i do not know if it is right to announce this problem here or should i create another Issue. any way i post it here. after running eigrpd daemon, it successfully formed neighborship with GNS3 cisco router and the learned routes visible in EIGRP Topology table but not inserted into zebra routing table. the problem has already been detected by other guys as it is announced here : "https://github.com/janovic/Quagga-EIGRP/issues/5". i hope you could fix it. The following pictures show the problem : topology table zebra routing table

donaldsharp commented 7 years ago

@mTaleqani Yes I am aware of this issue. I have not had time to look at this issue, yet. I was hoping @diivious was going to have time to look at it and point out the issue for me :)

donaldsharp commented 7 years ago

@mTaleqani -

Please check out my branch listed above, EIGRP now installs routes:

robot.cumulusnetworks.com# show ip route 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,

  • selected route, * - FIB route

K> 0.0.0.0/0 via 10.0.2.2, enp0s3 C> 10.0.2.0/24 is directly connected, enp0s3 E 192.168.2.0/24 [0/0] via 127.0.0.1, enp0s10 inactive C> 192.168.2.0/24 is directly connected, enp0s10 E> 192.168.3.4/32 [0/0] via 192.168.2.144, enp0s10 E> 192.168.4.5/32 [0/0] via 192.168.2.144, enp0s10 E> 192.168.4.6/32 [0/0] via 192.168.2.144, enp0s10 C>* 192.168.22.11/32 is directly connected, lo robot.cumulusnetworks.com# show ip route 192.168.4.5 Routing entry for 192.168.4.5/32 Known via "eigrp", distance 0, metric 0, best

robot.cumulusnetworks.com#

Probably still needs work... and no real testing has been done other than to prove that they have been installed

diivious commented 7 years ago

hummm...
You may not have permission to access frr-eigrp. Check Preferences to make sure you’re still logged in.

donaldsharp commented 7 years ago

@diivious - Try here: I just gave you collaborator permission too on the REP https://github.com/donaldsharp/frr/tree/EIGRP

donaldsharp commented 7 years ago

a

mTaleqani commented 7 years ago

@donaldsharp - I have tested it several times and now EIGRP successfully inserts routes into zebra daemon, then i leave it running and after 30 minutes (sometimes after an hour) zebra daemon crashes and a syslog message saying "Warning: closing connection to zebra because of an I/O error!" is printed and zebra daemon is killed and thus all the routes are removed from the kernel, but EIGRP daemon is still running and working. but if i run zebra daemon along with for example OSPF daemon, neither of them crashes. zebra only crashes when it is running along with EIGRP (leave it running for at least one hour then you will see that zebra crashes)

donaldsharp commented 7 years ago

@mTaleqani do you have a stack trace? Since Zebra is crashing that implies that eigrp is sending bad data. Do we have any other logs?

I'll set this up a bit later today and see what I can make happen.

mTaleqani commented 7 years ago

@donaldsharp - unfortunately did not get any other logs except the one i mentioned above.

donaldsharp commented 7 years ago

@mTaleqani - I just found and fixed an issue in the send of data to zebra involved with a route delete. Please give this new version another try.

mTaleqani commented 7 years ago

@donaldsharp - now route delete does not work for the zebra. i mean if an eigrp route is gone, eigrpd topology table reacts to it and it removes it from it's topology table but that route still alive in zebra daemon :(

donaldsharp commented 7 years ago

@mTaleqani -> Fixed another issue with the send down of data. Probably still more work ahead :)

mTaleqani commented 7 years ago

@donaldsharp - now eigrpd and zebra successfully add and remove routes when changes happen to the network. eigrpd right now can not handle equal cost routes as by default eigrp maximum-path should be 4 so equal-cost routes should be inserted into zebra daemon but right now only one of them is inserted into the zebra daemon although there are some equal cost routes in the eigrp topology table as it is shown below : image

image

mTaleqani commented 7 years ago

@donaldsharp - i made some changes to the one of the eigrpd neighbors (cisco router) and one of the neighbors now advertise the same routes with higher metric. so now both routes are visible in eigrp topology table but none are inserted to the zebra daemon! it is shown in the following pictures :

image

image

this is the topology that i am using : image in the above topology, both clouds are connected to the virtual machine hosting FRR.

Conclusion : when both routers advertise the routes with the same metrics, although it is shown in the topology table as "2 Successors", only one of them is inserted to the zebra daemon.

but if one of the neighbors advertise the same routes with higher metrics, although they are shown in the topology table and stated as "1 Successor Route", none of them are inserted to the zebra daemon.

donaldsharp commented 7 years ago

@mTaleqani I just addressed some rib add/del issues, cleaned up some memory leaks. Please give it another whirl

mTaleqani commented 7 years ago

@donaldsharp - they are all fixed and working like a charm :+1: .

when vtysh is called some warnings are printed out but i guess do not affect to vtysh functions. the warnings are shown in the following pictures : image

there are still some EIGRP features that not working still (probably not implemented yet) : 1 - eigrp router-id : possible to configure it via eigrpd cli but not functioning (not added to running-config) 2 - maximum-path : possible to configure it via cli but not functioning. (it is added to running config but not functioning). i made maximum-path = 1 but still got two equal cost routes in RIB.

donaldsharp commented 7 years ago

@mTaleqani - I fixed the max-path issue last night (untested) and pushed it up. router-id is going to be more work than I want to do.

Question to all -> What do we need to do to consider this ready for a PR?

mTaleqani commented 7 years ago

@donaldsharp - maximum-path still not working. when it is set to 1 there are still 2 eigrp routes in rib. passive-interface : it is not feasible to make an interface as passive-interface in eigrpd. when we type passive-interface in eigrpd cli, only the following options are available : image so based on the above options i can not make my eth0 as passive-interface. but in ospfd it is possible to make an interface as Passive. in ospfd when we type passive interface, the following options are available : image and by using the "ifname" option, it is possible to make an interface as passive.

donaldsharp commented 7 years ago

@mTaleqani - Yes you are correct, I wrote no code to handle the situation of setting max-paths after we have already brought up neighbors. Save the config and reload and things should work. Hopefully 'good enough' for the moment.

I'll take a look at passive-interface while I got some time this afternoon to see what I can scrumble up.

donaldsharp commented 7 years ago

passive-interface commands are now accepted on the branch but nothing is done about it yet. That code has not been written yet