Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ANSAINET EIGRP #570

Closed
wants to merge 13 commits into from
Closed

Conversation

AwziNihilist
Copy link
Contributor

ANSAINET EIGRP

Implementation of routing protocol EIGRP with support for IPv4 and IPv6, ported from ANSAINET 3.4.0 into INET 4.2.
https://ansa.omnetpp.org/

Source files added into: src/inet/routing/eigrp
Example files added into examples/eigrp

Other changes:

src/inet/common/Protocol.h/.cc
src/inet/common/ProtocolGroup.cc

Addition of EIGRP (as a protocol)

src/inet/node/inet/Router.ned

Addition of boolean value 'hasEigrp'
Addition of submodule EigrpProcessDS if 'hasEigrp'
Addition of connections if 'hasEigrp'

src/inet/node/eigrp/EigrpRouter.ned

Creation of EIGRP router
Settting 'hasEigrp' to 'true'

src/inet/routing/contract/IEigrp.ned

Creation of moduleinterface IEigrp

src/inet/routing/eigrp
EIGRP source files structure:
EigrpDeviceConfigurator - Reads 'xml' configuration
EigrpDual - Implementation of DUAL fsm
EigrpDualStack - Supporting DUAL functions for Ipv4 and Ipv6
EigrpRtp - Implementation of Reliable transport protocol
EigrpSplitter - Splits Ipv4 and Ipv6 traffic by source address type
EigrpTimer - Eigrp Timers

/messages
Contains EIGRP message description

/pdms
Contains Ipv4 and Ipv6 protocol dependent modules. These contol EIGRP process for Ipv4 and Ipv6 restectively.

/tables
Constains following classes:
EigrpDisabledInterfaces - Implements table to store interfaces with disabled EIGRP.
EigrpInterfaceTable - Implements table to store interfaces with enabled EIGRP.
EigrpNeighborTable - Implements table to store information about EIGRP neighbors.
EigrpTopologyTable - Implements table to store information about the topology.
EigrpNetworkTable - Implements table to store known networks.
EigrpRoute - Implements classes representing routes to networks.

EIGRP configuration
Ipv4 addresses are configured with Ipv4NetworkConfigurator.
Ipv6 addresses are configured with 'xml' file. This coresponds to Cisco ipv6 EIGRP configuration.

EIGRP examples
All included scenarios are fingerprinted.
testing_scenario - 4 Routers, 4 LANs, IPv4 only
testing_scenario_ds - 4 Routers, 4 LANs, IPv4 and IPV6 (included both with link-local and global addresses)
testing_scenario6 - 4 Routers, 4 LANs, IPv6 only
two_node - 2 Routers, 2 LANs, IPv4 only
two_node6 - 2 Routers, 2 LANs, IPv6 only
basic - 4 Routers, 4 LANs, IPv4 only (includes scenarios for passiveInt, disabled split-horizon, unequal cost routing, no load-balancing)
snake - 3 Routers, 3 LANs, IPv4 only
square_stub - 4 Routers, 4 LANs, IPv4 only (includes stub routers)
square_stub_mesh - 4 Routers, 4 LANs, IPv4 only (includes stub routers)

Made by:

Vladimir Vesely
Jan Bloudicek
Vit Rek
Jan Zavrel

@ Brno University of Technology.

@levy
Copy link
Contributor

levy commented Oct 30, 2020

Thank you guys! This looks promising and beautifully organized. It should go into the next INET release.

@levy levy self-assigned this Oct 30, 2020
@levy levy added the Feature label Oct 30, 2020
@ZoltanBojthe
Copy link
Contributor

(Merged). Rebased to current master and fixed for it.

@levy
Copy link
Contributor

levy commented Nov 5, 2020

Thank you again for the very nice PL. Could you please check if everything looks good in master from your side?

Please note that INET master requires the latest preview release. Alternatively, you can use the master branch from the omnet repository.

@ZoltanBojthe ZoltanBojthe removed their request for review November 5, 2020 17:38
@ZoltanBojthe ZoltanBojthe self-assigned this Nov 5, 2020
@AwziNihilist
Copy link
Contributor Author

Hi guys,

I would love to verify the EIGRP impl. after the merge but I was unable to make the lastest commit 38459d779023182b89534f686ff5966447980a2a in master to work. I tried running the OMNeT++ 6.0 Preview 9 with the
MinGW64 Compiler Toolchain on Win 10 and while the installation, aloha test and INET building went ok, launching any simulation ends with these[IMGUR] error messages. (included both release and debug builds)

I even tried to run it on Ubuntu though wsl 2 but I had some issues with X server and kinda lost my patience there.

I now have a few thoughts in mind. If I made some stupid mistake or if there is some quick solution just throw it at me. Alternatively, you could verify the scenarios with the fingerprints yourself - to verify that at least the correct messages are being exchanged (as I saw some changes to InterfaceEntry). Or if this could be a bigger issue (for Windows users) I could open a ticket on the forums.

I truly hope this doesn't give you a headache.

In any case have a good day.

Jan Zavřel

@levy
Copy link
Contributor

levy commented Nov 6, 2020 via email

@rhornig
Copy link
Member

rhornig commented Nov 10, 2020

@AwziNihilist I've looked into the issue why the error occurred on Windows. Although it's not definite I have a suspicion:

INET itself links agains the winsock library (ws2_32.dll) on Windows and it seems that recent instances of that DLL removed a public API. The WSCInstallProviderAndChains function is not present in the DLL on my system. Sadly the bundled mingwtoolchain's libws32_dll.a import library still contains it. This means that INET will fail to run on ALL systems where the DLL and the bundled toolchain's import lib is not in sync. I suspect this is an error on MS part, not a toolchain issue as MS clearly documents the function as a public API.

If you can get a hold of an older version of the libws2_32.a file from an omnet 5.6 distribution (from tools\win64\mingw64\x86_64-w64-mingw32\lib ), copy it (after backing up the original file) to the 6.0pre9 installation (to the same directory) and then rebuild INET. That will link with an older version of the import lib that did not contain this function.

Hope this will work.

@AwziNihilist
Copy link
Contributor Author

Hey, I followed the instruction but with no luck. I am still getting the exact same error messages. I replaced libws2_32.a with one provided in version 5.6.2, used clean and build.

If you have anything else I'm willing to try it out. Im quite busy this week, but I will eventually look into WSL again.

cheers.

@levy
Copy link
Contributor

levy commented Nov 25, 2020

This PR has been merged into INET master and all fingerprint tests pass, I close it now. If any problem comes up with EIGRP in the future then the best action would be to open a new issue for the problem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants