Search in sources :

Example 1 with RipProcess

use of org.batfish.datamodel.RipProcess in project batfish by batfish.

the class VirtualRouterTest method testRipInitialization.

/**
 * Check that initialization of RIP internal routes happens correctly
 */
@Test
public void testRipInitialization() {
    // Incomplete Setup
    VirtualRouter vr = makeIosVirtualRouter(null);
    addInterfaces(vr._c, exampleInterfaceAddresses);
    vr.initRibs();
    vr.initBaseRipRoutes();
    // Check that nothing happens
    assertThat(vr._ripInternalRib.getRoutes(), is(emptyIterableOf(RipInternalRoute.class)));
    // Complete setup by adding a process
    RipProcess ripProcess = new RipProcess();
    ripProcess.setInterfaces(vr._vrf.getInterfaceNames());
    vr._vrf.setRipProcess(ripProcess);
    vr.initBaseRipRoutes();
    assertThat(vr._ripInternalRib.getRoutes(), containsInAnyOrder(exampleInterfaceAddresses.values().stream().map(address -> new RipInternalRoute(address.getPrefix(), null, RoutingProtocol.RIP.getDefaultAdministrativeCost(vr._c.getConfigurationFormat()), RipProcess.DEFAULT_RIP_COST)).collect(Collectors.toList()).toArray(new RipInternalRoute[] {})));
    vr._ripInternalRib.getRoutes();
}
Also used : RipInternalRoute(org.batfish.datamodel.RipInternalRoute) RipProcess(org.batfish.datamodel.RipProcess) Test(org.junit.Test)

Example 2 with RipProcess

use of org.batfish.datamodel.RipProcess in project batfish by batfish.

the class Batfish method initRemoteRipNeighbors.

@Override
public void initRemoteRipNeighbors(Map<String, Configuration> configurations, Map<Ip, Set<String>> ipOwners, Topology topology) {
    for (Entry<String, Configuration> e : configurations.entrySet()) {
        String hostname = e.getKey();
        Configuration c = e.getValue();
        for (Entry<String, Vrf> e2 : c.getVrfs().entrySet()) {
            Vrf vrf = e2.getValue();
            RipProcess proc = vrf.getRipProcess();
            if (proc != null) {
                proc.setRipNeighbors(new TreeMap<>());
                String vrfName = e2.getKey();
                for (String ifaceName : proc.getInterfaces()) {
                    Interface iface = vrf.getInterfaces().get("ifaceName");
                    SortedSet<Edge> ifaceEdges = topology.getInterfaceEdges().get(new NodeInterfacePair(hostname, ifaceName));
                    boolean hasNeighbor = false;
                    Ip localIp = iface.getAddress().getIp();
                    if (ifaceEdges != null) {
                        for (Edge edge : ifaceEdges) {
                            if (edge.getNode1().equals(hostname)) {
                                String remoteHostname = edge.getNode2();
                                String remoteIfaceName = edge.getInt2();
                                Configuration remoteNode = configurations.get(remoteHostname);
                                Interface remoteIface = remoteNode.getInterfaces().get(remoteIfaceName);
                                Vrf remoteVrf = remoteIface.getVrf();
                                String remoteVrfName = remoteVrf.getName();
                                RipProcess remoteProc = remoteVrf.getRipProcess();
                                if (remoteProc != null) {
                                    if (remoteProc.getRipNeighbors() == null) {
                                        remoteProc.setRipNeighbors(new TreeMap<>());
                                    }
                                    if (remoteProc.getInterfaces().contains(remoteIfaceName)) {
                                        Ip remoteIp = remoteIface.getAddress().getIp();
                                        Pair<Ip, Ip> localKey = new Pair<>(localIp, remoteIp);
                                        RipNeighbor neighbor = proc.getRipNeighbors().get(localKey);
                                        if (neighbor == null) {
                                            hasNeighbor = true;
                                            // initialize local neighbor
                                            neighbor = new RipNeighbor(localKey);
                                            neighbor.setVrf(vrfName);
                                            neighbor.setOwner(c);
                                            neighbor.setInterface(iface);
                                            proc.getRipNeighbors().put(localKey, neighbor);
                                            // initialize remote neighbor
                                            Pair<Ip, Ip> remoteKey = new Pair<>(remoteIp, localIp);
                                            RipNeighbor remoteNeighbor = new RipNeighbor(remoteKey);
                                            remoteNeighbor.setVrf(remoteVrfName);
                                            remoteNeighbor.setOwner(remoteNode);
                                            remoteNeighbor.setInterface(remoteIface);
                                            remoteProc.getRipNeighbors().put(remoteKey, remoteNeighbor);
                                            // link neighbors
                                            neighbor.setRemoteRipNeighbor(remoteNeighbor);
                                            remoteNeighbor.setRemoteRipNeighbor(neighbor);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    if (!hasNeighbor) {
                        Pair<Ip, Ip> key = new Pair<>(localIp, Ip.ZERO);
                        RipNeighbor neighbor = new RipNeighbor(key);
                        neighbor.setVrf(vrfName);
                        neighbor.setOwner(c);
                        neighbor.setInterface(iface);
                        proc.getRipNeighbors().put(key, neighbor);
                    }
                }
            }
        }
    }
}
Also used : RipNeighbor(org.batfish.datamodel.RipNeighbor) HostConfiguration(org.batfish.representation.host.HostConfiguration) Configuration(org.batfish.datamodel.Configuration) ImmutableConfiguration(org.apache.commons.configuration2.ImmutableConfiguration) AwsConfiguration(org.batfish.representation.aws.AwsConfiguration) IptablesVendorConfiguration(org.batfish.representation.iptables.IptablesVendorConfiguration) VendorConfiguration(org.batfish.vendor.VendorConfiguration) NodeInterfacePair(org.batfish.datamodel.collections.NodeInterfacePair) Ip(org.batfish.datamodel.Ip) RoutesByVrf(org.batfish.datamodel.collections.RoutesByVrf) Vrf(org.batfish.datamodel.Vrf) BgpAdvertisementsByVrf(org.batfish.datamodel.collections.BgpAdvertisementsByVrf) RipProcess(org.batfish.datamodel.RipProcess) Edge(org.batfish.datamodel.Edge) Interface(org.batfish.datamodel.Interface) Pair(org.batfish.common.Pair) NodeInterfacePair(org.batfish.datamodel.collections.NodeInterfacePair)

Aggregations

RipProcess (org.batfish.datamodel.RipProcess)2 ImmutableConfiguration (org.apache.commons.configuration2.ImmutableConfiguration)1 Pair (org.batfish.common.Pair)1 Configuration (org.batfish.datamodel.Configuration)1 Edge (org.batfish.datamodel.Edge)1 Interface (org.batfish.datamodel.Interface)1 Ip (org.batfish.datamodel.Ip)1 RipInternalRoute (org.batfish.datamodel.RipInternalRoute)1 RipNeighbor (org.batfish.datamodel.RipNeighbor)1 Vrf (org.batfish.datamodel.Vrf)1 BgpAdvertisementsByVrf (org.batfish.datamodel.collections.BgpAdvertisementsByVrf)1 NodeInterfacePair (org.batfish.datamodel.collections.NodeInterfacePair)1 RoutesByVrf (org.batfish.datamodel.collections.RoutesByVrf)1 AwsConfiguration (org.batfish.representation.aws.AwsConfiguration)1 HostConfiguration (org.batfish.representation.host.HostConfiguration)1 IptablesVendorConfiguration (org.batfish.representation.iptables.IptablesVendorConfiguration)1 VendorConfiguration (org.batfish.vendor.VendorConfiguration)1 Test (org.junit.Test)1