use of org.onosproject.segmentrouting.storekey.VlanNextObjectiveStoreKey in project trellis-control by opennetworkinglab.
the class XconnectManager method cleanupL2MulticastRule.
/**
* Cleans up VLAN L2 multicast group on given deviceId. ACL rules for the group will also be deleted.
* Normally multicast group is not removed if it contains access ports; which can be forced
* by "force" flag
*
* @param deviceId Device ID
* @param pairPort Pair port number
* @param vlanId VLAN ID
* @param force Forceful removal
*/
private void cleanupL2MulticastRule(DeviceId deviceId, PortNumber pairPort, VlanId vlanId, boolean force) {
// Ensure enough rights to program pair device
if (!srService.shouldProgram(deviceId)) {
log.debug("Abort cleanup L2Multicast {}-{}: {}", deviceId, vlanId, ERROR_NOT_LEADER);
return;
}
VlanNextObjectiveStoreKey key = new VlanNextObjectiveStoreKey(deviceId, vlanId);
// Ensure L2 multicast group doesn't contain access ports
if (hasAccessPortInMulticastGroup(key, pairPort) && !force) {
return;
}
// Load L2 multicast group details
int vlanMulticastNextId = getMulticastGroupNextObjectiveId(key);
if (vlanMulticastNextId == -1) {
return;
}
// Step 1 : Clear ACL rule; selector = vlan + pair-port, output = vlan L2 multicast group
TrafficSelector.Builder l2MulticastSelector = DefaultTrafficSelector.builder();
l2MulticastSelector.matchEthType(Ethernet.TYPE_VLAN);
l2MulticastSelector.matchInPort(pairPort);
l2MulticastSelector.matchVlanId(vlanId);
ForwardingObjective.Builder vlanMulticastForwardingObj = DefaultForwardingObjective.builder().withFlag(ForwardingObjective.Flag.VERSATILE).nextStep(vlanMulticastNextId).withSelector(l2MulticastSelector.build()).withPriority(100).fromApp(srService.appId()).makePermanent();
ObjectiveContext context = new DefaultObjectiveContext((objective) -> log.debug("L2 multicasting rule for device {}, port/vlan {}/{} deleted", deviceId, pairPort, vlanId), (objective, error) -> log.warn("Failed to delete L2 multicasting rule for device {}, " + "ports/vlan {}/{}: {}", deviceId, pairPort, vlanId, error));
flowObjectiveService.forward(deviceId, vlanMulticastForwardingObj.remove(context));
// Step 2 : Clear L2 multicast group associated with vlan
NextObjective.Builder l2MulticastGroupBuilder = DefaultNextObjective.builder().withId(vlanMulticastNextId).withType(NextObjective.Type.BROADCAST).fromApp(srService.appId()).withMeta(DefaultTrafficSelector.builder().matchVlanId(vlanId).matchEthDst(MacAddress.IPV4_MULTICAST).build()).addTreatment(DefaultTrafficTreatment.builder().popVlan().setOutput(pairPort).build());
context = new DefaultObjectiveContext((objective) -> log.debug("L2 multicast group with NextObject Id {} deleted on {} for subnet {} ", vlanMulticastNextId, deviceId, vlanId), (objective, error) -> log.warn("L2 multicast group with NextObject Id {} failed to delete on {} for subnet {} : {}", vlanMulticastNextId, deviceId, vlanId, error));
flowObjectiveService.next(deviceId, l2MulticastGroupBuilder.remove(context));
// Finally clear store.
removeMulticastGroup(key);
}
use of org.onosproject.segmentrouting.storekey.VlanNextObjectiveStoreKey in project trellis-control by opennetworkinglab.
the class SegmentRoutingManager method activate.
@Activate
protected void activate(ComponentContext context) {
appId = coreService.registerApplication(APP_NAME);
mainEventExecutor = Executors.newSingleThreadScheduledExecutor(groupedThreads("onos/sr", "event-main-%d", log));
hostEventExecutor = Executors.newSingleThreadScheduledExecutor(groupedThreads("onos/sr", "event-host-%d", log));
routeEventExecutor = Executors.newSingleThreadScheduledExecutor(groupedThreads("onos/sr", "event-route-%d", log));
mcastEventExecutor = Executors.newSingleThreadScheduledExecutor(groupedThreads("onos/sr", "event-mcast-%d", log));
packetExecutor = Executors.newSingleThreadExecutor(groupedThreads("onos/sr", "packet-%d", log));
neighborExecutor = Executors.newFixedThreadPool(DEFAULT_POOL_SIZE, groupedThreads("onos/sr", "neighbor-%d", log));
log.debug("Creating EC map nsnextobjectivestore");
EventuallyConsistentMapBuilder<DestinationSetNextObjectiveStoreKey, NextNeighbors> nsNextObjMapBuilder = storageService.eventuallyConsistentMapBuilder();
dsNextObjStore = nsNextObjMapBuilder.withName("nsnextobjectivestore").withSerializer(createSerializer()).withTimestampProvider((k, v) -> new WallClockTimestamp()).build();
log.trace("Current size {}", dsNextObjStore.size());
log.debug("Creating EC map vlannextobjectivestore");
EventuallyConsistentMapBuilder<VlanNextObjectiveStoreKey, Integer> vlanNextObjMapBuilder = storageService.eventuallyConsistentMapBuilder();
vlanNextObjStore = vlanNextObjMapBuilder.withName("vlannextobjectivestore").withSerializer(createSerializer()).withTimestampProvider((k, v) -> new WallClockTimestamp()).build();
log.debug("Creating EC map macvlannextobjectivestore");
EventuallyConsistentMapBuilder<MacVlanNextObjectiveStoreKey, Integer> macVlanNextObjMapBuilder = storageService.eventuallyConsistentMapBuilder();
macVlanNextObjStore = macVlanNextObjMapBuilder.withName("macvlannextobjectivestore").withSerializer(createSerializer()).withTimestampProvider((k, v) -> new WallClockTimestamp()).build();
log.debug("Creating EC map subnetnextobjectivestore");
EventuallyConsistentMapBuilder<PortNextObjectiveStoreKey, Integer> portNextObjMapBuilder = storageService.eventuallyConsistentMapBuilder();
portNextObjStore = portNextObjMapBuilder.withName("portnextobjectivestore").withSerializer(createSerializer()).withTimestampProvider((k, v) -> new WallClockTimestamp()).build();
EventuallyConsistentMapBuilder<String, Tunnel> tunnelMapBuilder = storageService.eventuallyConsistentMapBuilder();
tunnelStore = tunnelMapBuilder.withName("tunnelstore").withSerializer(createSerializer()).withTimestampProvider((k, v) -> new WallClockTimestamp()).build();
EventuallyConsistentMapBuilder<String, Policy> policyMapBuilder = storageService.eventuallyConsistentMapBuilder();
policyStore = policyMapBuilder.withName("policystore").withSerializer(createSerializer()).withTimestampProvider((k, v) -> new WallClockTimestamp()).build();
processor = new InternalPacketProcessor();
linkListener = new InternalLinkListener();
deviceListener = new InternalDeviceListener();
appCfgHandler = new AppConfigHandler(this);
mcastHandler = new McastHandler(this);
hostHandler = new HostHandler(this);
linkHandler = new LinkHandler(this);
routeHandler = new RouteHandler(this);
neighbourHandler = new SegmentRoutingNeighbourDispatcher(this);
l2TunnelHandler = new DefaultL2TunnelHandler(this);
topologyHandler = new TopologyHandler(this);
compCfgService.preSetProperty("org.onosproject.provider.host.impl.HostLocationProvider", "requestInterceptsEnabled", "false", false);
compCfgService.preSetProperty("org.onosproject.net.neighbour.impl.NeighbourResolutionManager", "requestInterceptsEnabled", "false", false);
compCfgService.preSetProperty("org.onosproject.dhcprelay.DhcpRelayManager", "arpEnabled", "false", false);
compCfgService.preSetProperty("org.onosproject.net.host.impl.HostManager", "greedyLearningIpv6", "true", false);
compCfgService.preSetProperty("org.onosproject.routing.cpr.ControlPlaneRedirectManager", "forceUnprovision", "true", false);
compCfgService.preSetProperty("org.onosproject.routeservice.store.RouteStoreImpl", "distributed", "true", false);
compCfgService.preSetProperty("org.onosproject.provider.host.impl.HostLocationProvider", "multihomingEnabled", "true", false);
compCfgService.preSetProperty("org.onosproject.provider.lldp.impl.LldpLinkProvider", "staleLinkAge", "15000", false);
compCfgService.preSetProperty("org.onosproject.net.host.impl.HostManager", "allowDuplicateIps", "false", false);
// For P4 switches
compCfgService.preSetProperty("org.onosproject.net.flow.impl.FlowRuleManager", "fallbackFlowPollFrequency", "4", false);
compCfgService.preSetProperty("org.onosproject.net.group.impl.GroupManager", "fallbackGroupPollFrequency", "3", false);
compCfgService.preSetProperty("org.onosproject.net.meter.impl.MeterManager", "fallbackMeterPollFrequency", "3", false);
compCfgService.registerProperties(getClass());
modified(context);
cfgService.addListener(cfgListener);
cfgService.registerConfigFactory(deviceConfigFactory);
cfgService.registerConfigFactory(appConfigFactory);
cfgService.registerConfigFactory(mcastConfigFactory);
log.info("Configuring network before adding listeners");
cfgListener.configureNetwork();
hostService.addListener(hostListener);
packetService.addProcessor(processor, PacketProcessor.director(2));
linkService.addListener(linkListener);
deviceService.addListener(deviceListener);
multicastRouteService.addListener(mcastListener);
routeService.addListener(routeListener);
topologyService.addListener(topologyListener);
mastershipService.addListener(mastershipListener);
clusterService.addListener(clusterListener);
linkHandler.init();
l2TunnelHandler.init();
drainEvents();
log.info("Started");
}
Aggregations