<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <groupId>org.opendaylight.controller</groupId>
+ <groupId>org.opendaylight.vpnservice</groupId>
<artifactId>config-parent</artifactId>
- <version>0.3.0-SNAPSHOT</version>
- <relativePath/>
+ <version>0.0.1-SNAPSHOT</version>
+ <relativePath>../../commons/config-parent</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>bgpmanager-api</artifactId>
- <version>1.0-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
<packaging>bundle</packaging>
-<!--
- <dependencies>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>vpnmanager-api</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>${project.groupId}.third-party</groupId>
- <artifactId>org.apache.thriftlib</artifactId>
- <version>1.0.1-SNAPSHOT</version>
- </dependency>
-
- </dependencies>
- -->
<properties>
<maven.javadoc.skip>true</maven.javadoc.skip>
</properties>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <groupId>org.opendaylight.controller</groupId>
+ <groupId>org.opendaylight.vpnservice</groupId>
<artifactId>config-parent</artifactId>
- <version>0.3.0-SNAPSHOT</version>
- <relativePath/>
+ <version>0.0.1-SNAPSHOT</version>
+ <relativePath>../../commons/config-parent</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>bgpmanager-impl</artifactId>
- <version>1.0-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
<packaging>bundle</packaging>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>bgpmanager-api</artifactId>
- <version>1.0-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>model-bgp</artifactId>
- <version>2013.07.15.7-SNAPSHOT</version>
+ <version>${model.bgp.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>fibmanager-api</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
</dependency>
<dependency>
</dependency>
</dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-checkstyle-plugin</artifactId>
- <configuration>
- <configLocation>
- ${project.basedir}/../../commons/src/main/resources/vpns_checks.xml
- </configLocation>
- <failsOnError>true</failsOnError>
- <includes>**/*.java,**/*.xml,**/*.ini</includes>
- <excludes>**/yang/</excludes>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
</project>
public class BgpManager implements BindingAwareProvider, AutoCloseable, IBgpManager {
- private static final Logger s_logger = LoggerFactory.getLogger(BgpManager.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(BgpManager.class);
private BgpConfigurationManager bgpConfigurationMgr;
private FibDSWriter fibDSWriter;
private BgpConfiguration bgpConfiguration = new BgpConfiguration();
try {
wait();
} catch (InterruptedException e) {
- s_logger.error("InterruptedException while waiting for Bgp connection to initialize");
+ LOGGER.error("InterruptedException while waiting for Bgp connection to initialize");
return;
}
}
public void startBgpService() throws TException {
if(bgpThriftClient == null) {
- s_logger.info("Start Bgp Service - bgpThriftClient is null. Unable to start BGP service.");
+ LOGGER.info("Start Bgp Service - bgpThriftClient is null. Unable to start BGP service.");
return;
}
// Now try start bgp - if bgp is already Active, it will tell us, nothing to do then
try {
bgpThriftClient.startBgp((int)bgpConfiguration.getAsNum(), bgpConfiguration.getRouterId());
- s_logger.info("Started BGP with AS number " + (int)bgpConfiguration.getAsNum() + " and router id " + bgpConfiguration.getRouterId());
+ LOGGER.info("Started BGP with AS number " + (int)bgpConfiguration.getAsNum() + " and router id " + bgpConfiguration.getRouterId());
} catch (BgpRouterException be) {
if(be.getErrorCode() == BgpRouterException.BGP_ERR_ACTIVE) {
- s_logger.info("bgp server already active");
+ LOGGER.info("bgp server already active");
return;
}
else if(be.getErrorCode() == BgpRouterException.BGP_ERR_NOT_INITED) {
- s_logger.error("bgp server connection not initialized.");
+ LOGGER.error("bgp server connection not initialized.");
reInitConn();
return;
}
else {
- s_logger.error("application error while starting bgp server " + be.getErrorCode());
+ LOGGER.error("application error while starting bgp server " + be.getErrorCode());
return;
}
} catch (TException t) {
- s_logger.error("Could not set up thrift connection with bgp server");
- //s_logger.trace("Transport error while starting bgp server ", t);
+ LOGGER.error("Could not set up thrift connection with bgp server");
+ //LOGGER.trace("Transport error while starting bgp server ", t);
reInitConn();
throw t;
} catch (Exception e) {
- s_logger.error("Error while starting bgp server");
- //s_logger.trace("Bgp Service not started due to exception", e);
+ LOGGER.error("Error while starting bgp server");
+ //LOGGER.trace("Bgp Service not started due to exception", e);
return;
}
@Override
public void onSessionInitiated(ProviderContext session) {
- s_logger.info("BgpManager Session Initiated");
+ LOGGER.info("BgpManager Session Initiated");
try {
final DataBroker dataBroker = session.getSALService(DataBroker.class);
bgpConfigurationMgr = new BgpConfigurationManager(dataBroker, bgpConfiguration, this);
fibDSWriter = new FibDSWriter(dataBroker);
} catch (Exception e) {
- s_logger.error("Error initializing services", e);
+ LOGGER.error("Error initializing services", e);
}
initializeBGPCommunication();
@Override
public void close() throws Exception {
- s_logger.info("BgpManager Closed");
+ LOGGER.info("BgpManager Closed");
//close the client and server ends of the thrift communication
if(bgpThriftClient != null)
protected void addNeighbor(String ipAddress, long asNum) throws TException {
if(bgpThriftClient == null) {
- s_logger.info("Add BGP Neighbor - bgpThriftClient is null. Unable to add BGP Neighbor.");
+ LOGGER.info("Add BGP Neighbor - bgpThriftClient is null. Unable to add BGP Neighbor.");
return;
}
try {
bgpThriftClient.addNeighbor(ipAddress, (int) asNum);
} catch (BgpRouterException b) {
- s_logger.error("Failed to add BGP neighbor " + ipAddress + "due to BgpRouter Exception number " + b.getErrorCode());
- s_logger.error("BgpRouterException trace ", b);
+ LOGGER.error("Failed to add BGP neighbor " + ipAddress + "due to BgpRouter Exception number " + b.getErrorCode());
+ LOGGER.error("BgpRouterException trace ", b);
} catch (TException t) {
- s_logger.error(String.format("Failed adding neighbor %s due to Transport error", ipAddress));
+ LOGGER.error(String.format("Failed adding neighbor %s due to Transport error", ipAddress));
reInitConn();
throw t;
} catch (Exception e) {
- s_logger.error(String.format("Failed adding neighbor %s", ipAddress));
+ LOGGER.error(String.format("Failed adding neighbor %s", ipAddress));
}
}
protected void deleteNeighbor(String ipAddress) throws TException {
if(bgpThriftClient == null) {
- s_logger.info("Delete BGP Neighbor - bgpThriftClient is null. Unable to delete BGP Neighbor.");
+ LOGGER.info("Delete BGP Neighbor - bgpThriftClient is null. Unable to delete BGP Neighbor.");
return;
}
try {
bgpThriftClient.delNeighbor(ipAddress);
} catch (BgpRouterException b) {
- s_logger.error("Failed to delete BGP neighbor " + ipAddress + "due to BgpRouter Exception number " + b.getErrorCode());
- s_logger.error("BgpRouterException trace ", b);
+ LOGGER.error("Failed to delete BGP neighbor " + ipAddress + "due to BgpRouter Exception number " + b.getErrorCode());
+ LOGGER.error("BgpRouterException trace ", b);
}catch (TException t) {
- s_logger.error(String.format("Failed deleting neighbor %s due to Transport error", ipAddress));
+ LOGGER.error(String.format("Failed deleting neighbor %s due to Transport error", ipAddress));
reInitConn();
throw t;
} catch (Exception e) {
- s_logger.error(String.format("Failed deleting neighbor %s", ipAddress));
+ LOGGER.error(String.format("Failed deleting neighbor %s", ipAddress));
}
}
@Override
public void addVrf(String rd, Collection<String> importRts, Collection<String> exportRts) throws Exception {
if(bgpThriftClient == null) {
- s_logger.info("Add BGP vrf - bgpThriftClient is null. Unable to add BGP vrf.");
+ LOGGER.info("Add BGP vrf - bgpThriftClient is null. Unable to add BGP vrf.");
return;
}
try {
bgpThriftClient.addVrf(rd, new ArrayList<>(importRts), new ArrayList<>(exportRts));
} catch (BgpRouterException b) {
- s_logger.error("Failed to add BGP vrf " + rd + "due to BgpRouter Exception number " + b.getErrorCode());
- s_logger.error("BgpRouterException trace ", b);
+ LOGGER.error("Failed to add BGP vrf " + rd + "due to BgpRouter Exception number " + b.getErrorCode());
+ LOGGER.error("BgpRouterException trace ", b);
throw b;
} catch (TException t) {
- s_logger.error(String.format("Failed adding vrf %s due to Transport error", rd));
+ LOGGER.error(String.format("Failed adding vrf %s due to Transport error", rd));
reInitConn();
throw t;
} catch (Exception e) {
- s_logger.error(String.format("Failed adding vrf %s", rd));
+ LOGGER.error(String.format("Failed adding vrf %s", rd));
throw e;
}
}
@Override
public void deleteVrf(String rd) throws Exception {
if(bgpThriftClient == null) {
- s_logger.info("Delete BGP vrf - bgpThriftClient is null. Unable to delete BGP vrf.");
+ LOGGER.info("Delete BGP vrf - bgpThriftClient is null. Unable to delete BGP vrf.");
return;
}
try {
bgpThriftClient.delVrf(rd);
} catch (BgpRouterException b) {
- s_logger.error("Failed to delete BGP vrf " + rd + "due to BgpRouter Exception number " + b.getErrorCode());
- s_logger.error("BgpRouterException trace ", b);
+ LOGGER.error("Failed to delete BGP vrf " + rd + "due to BgpRouter Exception number " + b.getErrorCode());
+ LOGGER.error("BgpRouterException trace ", b);
throw b;
} catch (TException t) {
- s_logger.error(String.format("Failed deleting vrf %s due to Transport error", rd));
+ LOGGER.error(String.format("Failed deleting vrf %s due to Transport error", rd));
reInitConn();
throw t;
} catch (Exception e) {
- s_logger.error(String.format("Failed deleting vrf %s", rd));
+ LOGGER.error(String.format("Failed deleting vrf %s", rd));
throw e;
}
}
try {
bgpThriftClient.addPrefix(rd, prefix, nextHop, vpnLabel);
} catch (BgpRouterException b) {
- s_logger.error("Failed to add BGP prefix " + prefix + "due to BgpRouter Exception number " + b.getErrorCode());
- s_logger.error("BgpRouterException trace ", b);
+ LOGGER.error("Failed to add BGP prefix " + prefix + "due to BgpRouter Exception number " + b.getErrorCode());
+ LOGGER.error("BgpRouterException trace ", b);
throw b;
} catch (TException t) {
- s_logger.error(String.format("Failed adding prefix entry <vrf:prefix:nexthop:vpnlabel> %s:%s:%s:%d due to Transport error",
+ LOGGER.error(String.format("Failed adding prefix entry <vrf:prefix:nexthop:vpnlabel> %s:%s:%s:%d due to Transport error",
rd, prefix, nextHop, vpnLabel));
reInitConn();
throw t;
} catch (Exception e) {
- s_logger.error(String.format("Failed adding prefix entry <vrf:prefix:nexthop:vpnlabel> %s:%s:%s:%d",
+ LOGGER.error(String.format("Failed adding prefix entry <vrf:prefix:nexthop:vpnlabel> %s:%s:%s:%d",
rd, prefix, nextHop, vpnLabel));
throw e;
}
try {
bgpThriftClient.delPrefix(rd, prefix);
} catch (BgpRouterException b) {
- s_logger.error("Failed to delete BGP prefix " + prefix + "due to BgpRouter Exception number " + b.getErrorCode());
- s_logger.error("BgpRouterException trace ", b);
+ LOGGER.error("Failed to delete BGP prefix " + prefix + "due to BgpRouter Exception number " + b.getErrorCode());
+ LOGGER.error("BgpRouterException trace ", b);
throw b;
} catch (TException t) {
- s_logger.error(String.format("Failed deleting prefix entry <vrf:prefix> %s:%s due to Transport error",
+ LOGGER.error(String.format("Failed deleting prefix entry <vrf:prefix> %s:%s due to Transport error",
rd, prefix));
reInitConn();
throw t;
} catch (Exception e) {
- s_logger.error(String.format("Failed deleting prefix entry <vrf:prefix> %s:%s",
+ LOGGER.error(String.format("Failed deleting prefix entry <vrf:prefix> %s:%s",
rd, prefix));
throw e;
}
bgpPort = port;
if(bgpThriftClient == null) {
- s_logger.error("Failed to connect to BGP server since Bgp Thrift Client is not initialized yet.");
+ LOGGER.error("Failed to connect to BGP server since Bgp Thrift Client is not initialized yet.");
return;
}
try {
bgpThriftClient.connect(host, port);
- s_logger.info("Connected to BGP server " + host + " on port " + port);
+ LOGGER.info("Connected to BGP server " + host + " on port " + port);
} catch (BgpRouterException b) {
- s_logger.error("Failed to connect to BGP server " + host + " on port " + port + " due to BgpRouter Exception number " + b.getErrorCode());
+ LOGGER.error("Failed to connect to BGP server " + host + " on port " + port + " due to BgpRouter Exception number " + b.getErrorCode());
//_logger.error("BgpRouterException trace ", b);
throw b;
} catch (TException t) {
- s_logger.error("Failed to initialize BGP Connection due to Transport error ");
+ LOGGER.error("Failed to initialize BGP Connection due to Transport error ");
throw t;
}
catch (Exception e) {
- s_logger.error("Failed to initialize BGP Connection ");
+ LOGGER.error("Failed to initialize BGP Connection ");
throw e;
}
}
try {
bgpConfiguration.setAsNum(asNum);
bgpConfiguration.setRouterId(routerId);
- } catch(Throwable e) {
- s_logger.error("failed configuring bgp ",e);
+ } catch(Exception e) {
+ LOGGER.error("failed configuring bgp ",e);
}
}
try {
bgpThriftClient.reInit();
- s_logger.info("Reinitialized connection to BGP Server " + bgpHost);
+ LOGGER.info("Reinitialized connection to BGP Server " + bgpHost);
} catch (BgpRouterException b) {
- s_logger.error("Failed to reinitialize connection to BGP server " + bgpHost + " on port " + bgpPort + " due to BgpRouter Exception number " + b.getErrorCode());
- s_logger.error("BgpRouterException trace ", b);
+ LOGGER.error("Failed to reinitialize connection to BGP server " + bgpHost + " on port " + bgpPort + " due to BgpRouter Exception number " + b.getErrorCode());
+ LOGGER.error("BgpRouterException trace ", b);
} catch (TException t) {
- s_logger.error("Failed to reinitialize BGP Connection due to Transport error.");
+ LOGGER.error("Failed to reinitialize BGP Connection due to Transport error.");
}
catch (Exception e) {
- s_logger.error("Failed to reinitialize BGP Connection.", e);
+ LOGGER.error("Failed to reinitialize BGP Connection.", e);
}
}
- /*public synchronized void startBgpSync() {
- boolean getRoutes = true;
- readBgpConfiguration();
- try {
- pushConfigurationToBgp();
-
- } catch (BgpRouterException b) {
- s_logger.error("Failed to push configuration to BGP due to BgpRouter Exception number " + b.getErrorCode());
- s_logger.error("BgpRouterException trace ", b);
- if(b.getErrorCode() == BgpRouterException.BGP_ERR_INACTIVE)
- getRoutes = false;
- } catch (Exception e) {
- s_logger.error("Failed to push configuration to bgp ", e);
- }
- if(getRoutes == true)
- pullConfigurationFromBgp();
- //controllerResyncLatch.countDown();
- }*/
-
- /*public void waitForControllerBgpResync() {
- try {
- controllerResyncLatch.await();
- } catch (InterruptedException e) {
- }
- }*/
-
- /*private void pullConfigurationFromBgp() {
- //get routes from bgp server
- s_logger.info("Starting bgp route sync");
- try {
- bgpThriftClient.doRouteSync();
- } catch (BgpRouterException b) {
- s_logger.error("Failed BGP Route sync due to BgpRouter Exception number " + b.getErrorCode());
- s_logger.error("BgpRouterException trace ", b);
- } catch (Exception e) {
- s_logger.error("Failed to pull configuration from bgp ", e);
- }
- }*/
-
- /*private BgpConfiguration readBgpConfiguration() {
- if (cache != null) {
- bgpConfiguration = cache.get("bgpConfiguration");
- if (bgpConfiguration == null) {
- s_logger.info("Created bgp configuration cache");
- bgpConfiguration = new BgpConfiguration();
- cache.put("bgpConfiguration", bgpConfiguration);
- } else {
- s_logger.info("Using bgp configuration cache");
- }
- }
- return bgpConfiguration;
- }*/
-
- /*public synchronized void pushConfigurationToBgp() throws Exception {
- if (bgpConfiguration.getAsNum() == 0) {
- s_logger.error("No as num configured, Skipping the push configuration to bgp ");
- throw new BgpRouterException(BgpRouterException.BGP_ERR_INACTIVE);
- //return;
- }
- if(bgpThriftClient == null) {
- s_logger.error("bgpThriftClient is null. Skipping the push configuration to bgp.");
- throw new BgpRouterException(BgpRouterException.BGP_ERR_INACTIVE);
- //return;
- }
-
- try {
- bgpThriftClient.startBgp((int)bgpConfiguration.getAsNum(), bgpConfiguration.getRouterId());
- s_logger.info("Started BGP with AS number " + (int)bgpConfiguration.getAsNum() + " and router id " + bgpConfiguration.getRouterId());
- } catch (BgpRouterException be) {
- if(be.getErrorCode() == BgpRouterException.BGP_ERR_ACTIVE) {
- s_logger.info("bgp server already active");
- return; //the assumption here is that bgp server is configured already with neighbor, vrfs and routes as well
- } if(be.getErrorCode() == BgpRouterException.BGP_ERR_INACTIVE) {
- s_logger.info("bgp server inactive");
- throw be;
- }
-
- else {
- s_logger.error("application error while starting bgp server %d", be.getErrorCode());
- return;
- }
-
- } catch (SocketTimeoutException to) {
- s_logger.error("Socket Timeout error while starting bgp server", to);
- return;
- } catch (TException t) {
- s_logger.error("Transport error while starting bgp server ", t);
- return;
- } catch (Exception e) {
- s_logger.error("Error while starting bgp server", e);
- }
-
- if (bgpConfiguration.getNeighbourIp().trim().length() > 0) {
- try {
- bgpThriftClient.addNeighbor(bgpConfiguration.getNeighbourIp(), bgpConfiguration.getNeighbourAsNum());
- } catch (TException t) {
- s_logger.error("Failed to push vrf to bgp due to Transport error" );
- //retry connection
- reInitConn();
- addNeighbor(bgpConfiguration.getNeighbourIp(), bgpConfiguration.getNeighbourAsNum());
- } catch (Exception e) {
- s_logger.error("Error while starting bgp server", e);
- }
- }
-
- Tenant tenant;
- try {
- tenant = tenantManager.getTenant("NEUTRON");
- } catch (TenantNotFoundException e) {
- s_logger.error("Tenant not found. Skipping push configuration to bgp.");
- return;
- }
- if (tenant != null) {
- int tenantId = tenant.getTenantId();
-
- Set<VpnInstanceInfo> vpnInfos = l3Manager.getVpnInstanceManager().getVpnsForTenant(tenantId);
- s_logger.info("Number of vpns to configure is "+vpnInfos.size());
- for (VpnInstanceInfo vpnInfo: vpnInfos) {
- try {
- bgpThriftClient.addVrf(vpnInfo.getRouteDistinguisher(),
- new ArrayList<>(vpnInfo.getRtImportList()),
- new ArrayList<>(vpnInfo.getRtExportList()));
- } catch (TException t) {
- s_logger.error("Failed to push vrf to bgp due to Transport error" );
- //retry connection
- reInitConn();
- addVrf(vpnInfo.getRouteDistinguisher(), new ArrayList<>(vpnInfo.getRtImportList()),
- new ArrayList<>(vpnInfo.getRtExportList()));
- } catch (Exception e) {
- s_logger.error("Failed to push vrf to bgp ", e);
- }
- }
- for (VpnInstanceInfo vpnInfo: vpnInfos) {
- ConcurrentMap<FibInfo, Object> fibInfos = l3Manager.getVpnInstanceManager().
- getLocalFibInfosForRdCache(vpnInfo.getRouteDistinguisher());
- s_logger.info("Number of fib infos to configure is "+fibInfos.size());
- for (FibInfo fibInfo : fibInfos.keySet()) {
- try {
- bgpThriftClient.addPrefix(vpnInfo.getRouteDistinguisher(), fibInfo.getDestinationPrefix(),
- fibInfo.getNextHopPrefix(), (int) fibInfo.getLabel());
- } catch (TException t) {
- s_logger.error("Failed to push route to bgp due to Transport error" );
- reInitConn();
- addPrefix(vpnInfo.getRouteDistinguisher(), fibInfo.getDestinationPrefix(),
- fibInfo.getNextHopPrefix(), (int) fibInfo.getLabel());
- } catch (Exception e) {
- s_logger.error("Failed to push route to bgp ", e);
- }
- }
- }
- }
-
- }
- */
-
public void disconnect() {
bgpThriftClient.disconnect();
}
public class BgpRouter {
private TTransport transport;
- private TSocket sock;
private TProtocol protocol;
private static BgpConfigurator.Client bgpClient=null;
- private static final Logger logger = LoggerFactory.getLogger(BgpRouter.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(BgpRouter.class);
private final static int ADD_NBR = 1;
private final static int DEL_PFX = 6;
private final static int START_BGP = 7;
- //public final static int BGP_ERR_INITED = 101;
- //public final static int BGP_ERR_NOT_INITED = 102;
-
-
private final static int GET_RTS_INIT = 0;
private final static int GET_RTS_NEXT = 1;
this.bgpPort = bgpPort;
bop = new BgpOp();
try {
- logger.info("Connecting to BGP Server " + bgpHost + " on port " + bgpPort);
+ LOGGER.info("Connecting to BGP Server " + bgpHost + " on port " + bgpPort);
reInit();
} catch (Exception e) {
- logger.error("Failed connecting to BGP server ");
+ LOGGER.error("Failed connecting to BGP server ");
throw e;
}
}
public void disconnect() {
- if(transport != null)
+ if(transport != null) {
transport.close();
+ }
}
public void reInit()
throws TException, BgpRouterException {
- if(transport != null)
+ if(transport != null) {
transport.close();
+ }
transport = new TSocket(bgpHost, bgpPort);
((TSocket)transport).setTimeout(Constants.CL_SKT_TIMEO_MS);
transport.open();
protocol = new TBinaryProtocol(transport);
bgpClient = new BgpConfigurator.Client(protocol);
- if(bop == null)
+ if(bop == null) {
bop = new BgpOp();
+ }
}
private void dispatch(BgpOp op)
throws TException, BgpRouterException {
int result = 1;
- if (bgpClient == null)
+ if (bgpClient == null) {
throw new BgpRouterException(BgpRouterException.BGP_ERR_NOT_INITED);
+ }
switch (op.type) {
case START_BGP:
break;
default: break;
}
- if (result != 0) throw new BgpRouterException(result);
+ if (result != 0) {
+ throw new BgpRouterException(result);
+ }
}
public void startBgp(int asNum, String rtrId)
bop.type = START_BGP;
bop.asNum = asNum;
bop.rtrId = rtrId;
- logger.info("Starting BGP Server with as number " + asNum + " and router ID " + rtrId);
+ LOGGER.info("Starting BGP Server with as number " + asNum + " and router ID " + rtrId);
dispatch(bop);
}
bop.type = ADD_NBR;
bop.nbrIp = nbrIp;
bop.nbrAsNum = nbrAsNum;
- logger.info("Adding BGP Neighbor " + nbrIp + " with as number " + nbrAsNum);
+ LOGGER.info("Adding BGP Neighbor " + nbrIp + " with as number " + nbrAsNum);
dispatch(bop);
}
throws TException, BgpRouterException {
bop.type = DEL_NBR;
bop.nbrIp = nbrIp;
- logger.info("Deleting BGP Neighbor " + nbrIp);
+ LOGGER.info("Deleting BGP Neighbor " + nbrIp);
dispatch(bop);
}
bop.rd = rd;
bop.irts = irts;
bop.erts = erts;
- logger.info("Adding BGP VRF rd: " + rd);
+ LOGGER.info("Adding BGP VRF rd: " + rd);
dispatch(bop);
}
throws TException, BgpRouterException {
bop.type = DEL_VRF;
bop.rd = rd;
- logger.info("Deleting BGP VRF rd: " + rd);
+ LOGGER.info("Deleting BGP VRF rd: " + rd);
dispatch(bop);
}
bop.pfx = prefix;
bop.nh = nexthop;
bop.lbl = label;
- logger.info("Adding BGP route - rd:" + rd + " prefix:" + prefix + " nexthop:" + nexthop + " label:" + label);
+ LOGGER.info("Adding BGP route - rd:" + rd + " prefix:" + prefix + " nexthop:" + nexthop + " label:" + label);
dispatch(bop);
}
bop.type = DEL_PFX;
bop.rd = rd;
bop.pfx = prefix;
- logger.info("Deleting BGP route - rd:" + rd + " prefix:" + prefix);
+ LOGGER.info("Deleting BGP route - rd:" + rd + " prefix:" + prefix);
dispatch(bop);
}
public int initRibSync(BgpSyncHandle handle)
throws TException, BgpRouterException {
- if (bgpClient == null)
+ if (bgpClient == null) {
throw new BgpRouterException(BgpRouterException.BGP_ERR_NOT_INITED);
- if (handle.getState() == BgpSyncHandle.ITERATING)
+ }
+ if (handle.getState() == BgpSyncHandle.ITERATING) {
return BgpRouterException.BGP_ERR_IN_ITER;
+ }
handle.setState(BgpSyncHandle.INITED);
handle.setMore(1);
return 0;
public int endRibSync(BgpSyncHandle handle)
throws TException, BgpRouterException {
- if (bgpClient == null)
+ if (bgpClient == null) {
throw new BgpRouterException(BgpRouterException.BGP_ERR_NOT_INITED);
+ }
int state = handle.getState();
switch (state) {
case BgpSyncHandle.INITED:
public Routes doRibSync(BgpSyncHandle handle)
throws TException, BgpRouterException {
- if (bgpClient == null)
+ if (bgpClient == null) {
throw new BgpRouterException(BgpRouterException.BGP_ERR_NOT_INITED);
+ }
int state = handle.getState();
if (state != BgpSyncHandle.INITED && state != BgpSyncHandle.ITERATING) {
Routes r = new Routes();
handle.setState(BgpSyncHandle.ITERATING);
int winSize = handle.getMaxCount()*handle.getRouteSize();
Routes outRoutes = bgpClient.getRoutes(op, winSize);
- if (outRoutes.errcode != 0)
- return outRoutes;
+ if (outRoutes.errcode != 0) {
+ return outRoutes;
+ }
handle.setMore(outRoutes.more);
- if (outRoutes.more == 0)
+ if (outRoutes.more == 0) {
handle.setState(BgpSyncHandle.DONE);
+ }
return outRoutes;
}
BgpSyncHandle bsh = BgpSyncHandle.getInstance();
try {
- logger.info("Starting BGP Route sync.. ");
+ LOGGER.info("Starting BGP Route sync.. ");
initRibSync(bsh);
while (bsh.getState() != bsh.DONE) {
Routes r = doRibSync(bsh);
if(r.getErrcode() == BgpRouterException.BGP_ERR_INACTIVE) {
//BGP server is inactive; log and return
- logger.error("BGP Server is inactive. Failed BGP Route sync");
+ LOGGER.error("BGP Server is inactive. Failed BGP Route sync");
return;
}
Iterator<Update> iter = r.getUpdatesIterator();
}
}
endRibSync(bsh);
- logger.info("Completed BGP Route sync.");
+ LOGGER.info("Completed BGP Route sync.");
} catch (Exception e) {
throw e;
}
};
- public List<Route> getRoutes()
- throws TException, BgpRouterException {
-
- BgpSyncHandle bsh = BgpSyncHandle.getInstance();
- List<Route> allRoutes = new ArrayList<Route>();
-
- try {
- initRibSync(bsh);
- while (bsh.getState() != bsh.DONE) {
- Routes r = doRibSync(bsh);
- Iterator<Update> iter = r.getUpdatesIterator();
- while (iter.hasNext()) {
- Update u = iter.next();
- Route route = new Route(u.rd, u.prefix, u.prefixlen, u.nexthop, u.label);
-
- allRoutes.add(route);
- }
- }
- endRibSync(bsh);
- } catch (Exception e) {
- throw e;
- }
- return allRoutes;
- };
-
}
import java.io.IOException;
import java.net.Socket;
import java.net.SocketException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class BgpSyncHandle {
private static BgpSyncHandle handle = null;
+ private static final Logger LOGGER = LoggerFactory.getLogger(BgpSyncHandle.class);
private int more;
private int state;
public static final int ABORTED = 4;
public static final int NEVER_DONE = 5;
- public static final int default_tcp_sock_sz = 87380; //default receive buffer size on linux > 2.4 (SLES 11)
+ public static final int DEFAULT_TCP_SOCK_SZ = 87380; //default receive buffer size on linux > 2.4
private BgpSyncHandle() {
more = 1;
}
public static synchronized BgpSyncHandle getInstance() {
- if (handle == null)
+ if (handle == null) {
handle = new BgpSyncHandle();
+ }
return handle;
}
public int getMaxCount() {
//compute the max count of routes we would like to send
Socket skt = new Socket();
- int sockBufSz = default_tcp_sock_sz;
+ int sockBufSz = DEFAULT_TCP_SOCK_SZ;
try {
sockBufSz = skt.getReceiveBufferSize();
} catch (SocketException s) {
+ LOGGER.warn("Socket Exception while retrieving default socket buffer size");
}
try {
skt.close();
} catch (IOException e) {
+ LOGGER.warn("IO Exception while closing socket for retrieving default socket buffer size");
}
return sockBufSz/getRouteSize();
}
public class BgpThriftService {
- private static final Logger logger = LoggerFactory.getLogger(BgpThriftService.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(BgpThriftService.class);
private int port;
- //private int serverType;
private int maxWorkerThreads;
private int minWorkerThreads;
private TServerTransport serverTransport;
- //private TNonblockingServerTransport serverTransport;
private TServer server;
private BgpUpdateHandler notificationHandler;
private BgpManager bgpManager;
public BgpThriftService(BgpManager bgpMgr, FibDSWriter dsWriter) {
bgpManager = bgpMgr;
notificationHandler = new BgpUpdateHandler(bgpManager, dsWriter);
- //fibDSWriter = dsWriter;
}
public void start() {
- logger.info("BGP Thrift Server starting.");
+ LOGGER.info("BGP Thrift Server starting.");
startBgpThriftServer();
}
public void stop() {
- logger.info("BGP Thrift Server stopping.");
+ LOGGER.info("BGP Thrift Server stopping.");
stopBgpThriftServer();
}
* Destroy method called up after the bundle has been stopped
*/
public void destroy() {
- logger.debug("BGP Thrift Server destroy ");
+ LOGGER.debug("BGP Thrift Server destroy ");
}
/**
public void stopBgpThriftServer() {
try {
- logger.debug("Server stopping");
+ LOGGER.debug("Server stopping");
if (serverTransport != null) {
serverTransport.close();
server.stop();
} catch (Exception e) {
- logger.error("Error while stopping the server - {} {}", getClass().getName(), e.getMessage());
+ LOGGER.error("Error while stopping the server - {} {}", getClass().getName(), e.getMessage());
}
}
private class ThriftRunnable implements Runnable {
@Override
public void run() {
- //notificationHandler = new BgpUpdateHandler(bgpManager);
try {
serverTransport = new TServerSocket(port);
- //serverTransport = new TNonblockingServerSocket(port);
- logger.info("Server Socket on Port {} ", port);
- } catch (TTransportException e) {
- e.printStackTrace();
+ LOGGER.info("Server Socket on Port {} ", port);
+ } catch (TTransportException e) {
+ LOGGER.error("Transport Exception while starting bgp thrift server", e);
return;
}
/* This may need to change. Right now, its as good as a blocking server for each client (client would be
server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport)
.maxWorkerThreads(maxWorkerThreads).minWorkerThreads(minWorkerThreads)
.processor(new BgpUpdater.Processor<BgpUpdateHandler>(notificationHandler)));
- /*
- THsHaServer.Args args = new THsHaServer.Args(serverTransport);
- args.workerThreads(10);
- server = new THsHaServer(args.processor(new BgpUpdater.Processor<BgpUpdateHandler>(notificationHandler)));*/
-
server.serve();
}
}
class BgpUpdateHandler implements BgpUpdater.Iface {
- private static final Logger logger = LoggerFactory.getLogger(BgpUpdateHandler.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(BgpUpdateHandler.class);
private BgpManager bgpManager;
private FibDSWriter fibDSWriter;
public void onUpdatePushRoute(String rd, String prefix, int plen,
String nexthop, int label) {
- logger.info("Route add ** " + rd + " ** " + prefix + "/" + plen
+ LOGGER.info("Route add ** " + rd + " ** " + prefix + "/" + plen
+ " ** " + nexthop + " ** " + label);
//Write to FIB in Data Store
fibDSWriter.addFibEntryToDS(rd, prefix + "/" + plen, nexthop, label);
}
public void onUpdateWithdrawRoute(String rd, String prefix, int plen) {
- logger.info("Route del ** " + rd + " ** " + prefix + "/" + plen);
+ LOGGER.info("Route del ** " + rd + " ** " + prefix + "/" + plen);
fibDSWriter.removeFibEntryFromDS(rd, prefix + "/" + plen);
}
public void onStartConfigResyncNotification() {
- logger.info("BGP (re)started");
+ LOGGER.info("BGP (re)started");
bgpManager.reInitConn();
}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
+
+This program and the accompanying materials are made available under the
+terms of the Eclipse Public License v1.0 which accompanies this distribution,
+and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>binding-parent</artifactId>
+ <version>0.7.0-SNAPSHOT</version>
+ <relativePath/>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.opendaylight.vpnservice</groupId>
+ <artifactId>binding-parent</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <properties>
+ <vpnservices.version>0.0.1-SNAPSHOT</vpnservices.version>
+ <ietf.inet.types.version>2010.09.24.7-SNAPSHOT</ietf.inet.types.version>
+ <ietf.yang.types.version>2010.09.24.7-SNAPSHOT</ietf.yang.types.version>
+ <ietf.interfaces.version>2014.05.08.7-SNAPSHOT</ietf.interfaces.version>
+ <iana.if.type.version>2014.05.08.7-SNAPSHOT</iana.if.type.version>
+ <yang.ext.version>2013.09.07.7-SNAPSHOT</yang.ext.version>
+ <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
+ <mdsal.version>1.2.0-SNAPSHOT</mdsal.version>
+ <vpns.mdsalutil.version>0.0.1-SNAPSHOT</vpns.mdsalutil.version>
+ <model.bgp.version>2013.07.15.7-SNAPSHOT</model.bgp.version>
+ </properties>
+</project>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: --><!--
+Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
+
+This program and the accompanying materials are made available under the
+terms of the Eclipse Public License v1.0 which accompanies this distribution,
+and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <parent>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>config-parent</artifactId>
+ <version>0.3.0-SNAPSHOT</version>
+ <relativePath/>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.opendaylight.vpnservice</groupId>
+ <artifactId>config-parent</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <properties>
+ <!-- ODL -->
+ <vpnservices.version>0.0.1-SNAPSHOT</vpnservices.version>
+ <ietf.inet.types.version>2010.09.24.7-SNAPSHOT</ietf.inet.types.version>
+ <ietf.yang.types.version>2010.09.24.7-SNAPSHOT</ietf.yang.types.version>
+ <ietf.interfaces.version>2014.05.08.7-SNAPSHOT</ietf.interfaces.version>
+ <iana.if.type.version>2014.05.08.7-SNAPSHOT</iana.if.type.version>
+ <yang.ext.version>2013.09.07.7-SNAPSHOT</yang.ext.version>
+ <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
+ <mdsal.version>1.2.0-SNAPSHOT</mdsal.version>
+ <vpns.mdsalutil.version>0.0.1-SNAPSHOT</vpns.mdsalutil.version>
+ <model.bgp.version>2013.07.15.7-SNAPSHOT</model.bgp.version>
+ </properties>
+
+ <dependencies>
+ <!-- Testing Dependencies -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <configuration>
+ <configLocation>
+ ${project.basedir}/../../commons/src/main/resources/vpns_checks.xml
+ </configLocation>
+ <failsOnError>true</failsOnError>
+ <includes>**/*.java,**/*.xml,**/*.ini,**/*.sh,**/*.bat</includes>
+ <excludes>**/yang/</excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>vpnservice-karaf</artifactId>
- <version>1.0-SNAPSHOT</version>
+ <version>0.1.0-SNAPSHOT</version>
<name>${project.artifactId}</name>
<prerequisites>
<maven>3.1.1</maven>
</parent>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>vpnservice-features</artifactId>
- <version>1.0-SNAPSHOT</version>
+ <version>0.1.0-SNAPSHOT</version>
<name>${project.artifactId}</name>
<modelVersion>4.0.0</modelVersion>
<prerequisites>
<mdsal.version>1.2.0-SNAPSHOT</mdsal.version>
<openflowplugin.version>0.1.0-SNAPSHOT</openflowplugin.version>
<yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
+ <vpnservices.version>0.0.1-SNAPSHOT</vpnservices.version>
<mdsalutil.version>0.0.1-SNAPSHOT</mdsalutil.version>
<vpnmanager.version>0.0.1-SNAPSHOT</vpnmanager.version>
<interfacemgr.version>0.0.1-SNAPSHOT</interfacemgr.version>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>bgpmanager-impl</artifactId>
- <version>${project.version}</version>
+ <version>${vpnservices.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>bgpmanager-impl</artifactId>
- <version>${project.version}</version>
+ <version>${vpnservices.version}</version>
<classifier>config</classifier>
<type>xml</type>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>bgpmanager-api</artifactId>
- <version>${project.version}</version>
+ <version>${vpnservices.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<feature version='${yangtools.version}'>odl-yangtools-models</feature>
<feature version='${openflowplugin.version}'>odl-openflowplugin-nsf-model</feature>
<bundle>mvn:org.opendaylight.vpnservice/model-bgp/{{VERSION}}</bundle>
+ <bundle>mvn:org.opendaylight.vpnservice/idmanager-api/${idmanager.version}</bundle>
<bundle>mvn:org.opendaylight.vpnservice/vpnmanager-api/${vpnmanager.version}</bundle>
<bundle>mvn:org.opendaylight.vpnservice/nexthopmgr-api/${nexthopmgr.version}</bundle>
- <bundle>mvn:org.opendaylight.vpnservice/idmanager-api/${idmanager.version}</bundle>
<bundle>mvn:org.opendaylight.vpnservice/fibmanager-api/${fibmanager.version}</bundle>
</feature>
<feature version='${project.version}'>odl-vpnservice-api</feature>
<feature version="${openflowplugin.version}">odl-openflowplugin-southbound</feature>
<feature version="${openflowplugin.version}">odl-openflowplugin-flow-services</feature>
- <bundle>mvn:org.opendaylight.vpnservice/bgpmanager-api/${project.version}</bundle>
- <bundle>mvn:org.opendaylight.vpnservice/bgpmanager-impl/${project.version}</bundle>
+ <bundle>mvn:org.opendaylight.vpnservice/idmanager-impl/${idmanager.version}</bundle>
+ <bundle>mvn:org.opendaylight.vpnservice/bgpmanager-api/${vpnservices.version}</bundle>
+ <bundle>mvn:org.opendaylight.vpnservice/bgpmanager-impl/${vpnservices.version}</bundle>
<bundle>mvn:org.opendaylight.vpnservice/mdsalutil-api/${interfacemgr.version}</bundle>
<bundle>mvn:org.opendaylight.vpnservice/mdsalutil-impl/${interfacemgr.version}</bundle>
<bundle>mvn:org.opendaylight.vpnservice/interfacemgr-api/${interfacemgr.version}</bundle>
<bundle>mvn:org.opendaylight.vpnservice/interfacemgr-impl/${interfacemgr.version}</bundle>
<bundle>mvn:org.opendaylight.vpnservice/vpnmanager-impl/${vpnmanager.version}</bundle>
<bundle>mvn:org.opendaylight.vpnservice/nexthopmgr-impl/${nexthopmgr.version}</bundle>
- <bundle>mvn:org.opendaylight.vpnservice/idmanager-impl/${idmanager.version}</bundle>
<bundle>mvn:org.opendaylight.vpnservice/fibmanager-impl/${fibmanager.version}</bundle>
<!--<bundle>mvn:org.opendaylight.vpnservice.third-party/org.apache.thriftlib/1.0.1-SNAPSHOT</bundle>-->
<bundle>wrap:mvn:org.apache.thrift/libthrift/0.9.1$overwrite=merge&Bundle-Version=0.9.1&Export-Package=*;-noimport:=true;version="0.9.1"</bundle>
<!--<bundle>wrap:mvn:javax.servlet/servlet-api/2.5</bundle>-->
- <configfile finalname="bgpmanager-impl-default-config.xml">mvn:org.opendaylight.vpnservice/bgpmanager-impl/${project.version}/xml/config</configfile>
+ <configfile finalname="bgpmanager-impl-default-config.xml">mvn:org.opendaylight.vpnservice/bgpmanager-impl/${vpnservices.version}/xml/config</configfile>
<configfile finalname="mdsalutil-impl-default-config.xml">mvn:org.opendaylight.vpnservice/mdsalutil-impl/${interfacemgr.version}/xml/config</configfile>
<configfile finalname="interfacemgr-impl-default-config.xml">mvn:org.opendaylight.vpnservice/interfacemgr-impl/${interfacemgr.version}/xml/config</configfile>
<configfile finalname="vpnmanager-impl-default-config.xml">mvn:org.opendaylight.vpnservice/vpnmanager-impl/${vpnmanager.version}/xml/config</configfile>
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <groupId>org.opendaylight.yangtools</groupId>
+ <groupId>org.opendaylight.vpnservice</groupId>
<artifactId>binding-parent</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath/>
+ <version>0.0.1-SNAPSHOT</version>
+ <relativePath>../../commons/binding-parent</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>fibmanager-api</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
<packaging>bundle</packaging>
- <properties>
- <!-- ODL -->
- <ietf.inet.types.version>2010.09.24.7-SNAPSHOT</ietf.inet.types.version>
- <ietf.yang.types.version>2010.09.24.7-SNAPSHOT</ietf.yang.types.version>
- <yang.ext.version>2013.09.07.7-SNAPSHOT</yang.ext.version>
- <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
- <mdsal.version>1.2.0-SNAPSHOT</mdsal.version>
- </properties>
-
<dependencies>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<dependency>
<groupId>org.opendaylight.yangtools.model</groupId>
<artifactId>ietf-interfaces</artifactId>
- <version>2014.05.08.7-SNAPSHOT</version>
+ <version>${ietf.interfaces.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.yangtools.model</groupId>
<artifactId>iana-if-type-2014-05-08</artifactId>
- <version>2014.05.08.7-SNAPSHOT</version>
+ <version>${iana.if.type.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.controller.model</groupId>
<?xml version="1.0" encoding="UTF-8"?>
<!-- vi: set et smarttab sw=4 tabstop=4: --><!--
-Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 which accompanies this distribution,
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <groupId>org.opendaylight.controller</groupId>
+ <groupId>org.opendaylight.vpnservice</groupId>
<artifactId>config-parent</artifactId>
- <version>0.3.0-SNAPSHOT</version>
- <relativePath/>
+ <version>0.0.1-SNAPSHOT</version>
+ <relativePath>../../commons/config-parent</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>fibmanager-impl</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
<packaging>bundle</packaging>
<dependencies>
<dependency>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>fibmanager-api</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>vpnmanager-impl</artifactId>
- <version>1.0-SNAPSHOT</version>
- </dependency>
- <!-- Testing Dependencies -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
+ <version>${vpnservices.version}</version>
</dependency>
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-all</artifactId>
- <scope>test</scope>
- </dependency>
</dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-checkstyle-plugin</artifactId>
- <configuration>
- <configLocation>
- ${project.basedir}/../../commons/src/main/resources/vpns_checks.xml
- </configLocation>
- <failsOnError>true</failsOnError>
- <includes>**/*.java,**/*.xml,**/*.ini,**/*.sh,**/*.bat</includes>
- <excludes>**/yang/</excludes>
- </configuration>
- </plugin>
- </plugins>
- </build>
+
</project>
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <groupId>org.opendaylight.yangtools</groupId>
+ <groupId>org.opendaylight.vpnservice</groupId>
<artifactId>binding-parent</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath/>
+ <version>0.0.1-SNAPSHOT</version>
+ <relativePath>../../commons/binding-parent</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>idmanager-api</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
<packaging>bundle</packaging>
- <properties>
- <!-- ODL -->
- <ietf.inet.types.version>2010.09.24.7-SNAPSHOT</ietf.inet.types.version>
- <ietf.yang.types.version>2010.09.24.7-SNAPSHOT</ietf.yang.types.version>
- <yang.ext.version>2013.09.07.7-SNAPSHOT</yang.ext.version>
- <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
- <mdsal.version>1.2.0-SNAPSHOT</mdsal.version>
- </properties>
-
<dependencies>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<?xml version="1.0" encoding="UTF-8"?>
<!-- vi: set et smarttab sw=4 tabstop=4: --><!--
-Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 which accompanies this distribution,
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <groupId>org.opendaylight.controller</groupId>
+ <groupId>org.opendaylight.vpnservice</groupId>
<artifactId>config-parent</artifactId>
- <version>0.3.0-SNAPSHOT</version>
- <relativePath/>
+ <version>0.0.1-SNAPSHOT</version>
+ <relativePath>../../commons/config-parent</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>idmanager-impl</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
<packaging>bundle</packaging>
<dependencies>
- <!-- Testing Dependencies -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-all</artifactId>
- <scope>test</scope>
- </dependency>
<dependency>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>idmanager-api</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
</dependency>
</dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-checkstyle-plugin</artifactId>
- <configuration>
- <configLocation>
- ${project.basedir}/../../commons/src/main/resources/vpns_checks.xml
- </configLocation>
- <failsOnError>true</failsOnError>
- <includes>**/*.java,**/*.xml,**/*.ini,**/*.sh,**/*.bat</includes>
- <excludes>**/yang/</excludes>
- </configuration>
- </plugin>
- </plugins>
- </build>
+
</project>
<type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-broker-osgi-registry</type>
<name>binding-osgi-broker</name>
</broker>
+ <rpc-registry>
+ <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
+ <name>binding-rpc-broker</name>
+ </rpc-registry>
</module>
</modules>
</data>
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.RpcError;
import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.*;
import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.id.pool.*;
import java.math.BigInteger;
-import java.util.Collection;
-import java.util.Collections;
+import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future;
}
public IdManager(final DataBroker db) {
- broker = db;
+ broker = db;
}
private <T extends DataObject> Optional<T> read(LogicalDatastoreType datastoreType,
Futures.addCallback(tx.submit(), callback);
}
+ private <T extends DataObject> void asyncUpdate(LogicalDatastoreType datastoreType,
+ InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
+ WriteTransaction tx = broker.newWriteOnlyTransaction();
+ tx.merge(datastoreType, path, data, true);
+ Futures.addCallback(tx.submit(), callback);
+ }
+
@Override
public Future<RpcResult<Void>> createIdPool(CreateIdPoolInput input)
{
String poolName = input.getPoolName();
long startIndx = input.getIdStart();
long poolSize = input.getPoolSize().longValue();
+ RpcResultBuilder<Void> rpcResultBuilder;
LOG.debug("poolName: %s, startIndx: %d , poolSize: %d ", poolName, startIndx, poolSize);
- InstanceIdentifier.InstanceIdentifierBuilder<IdPool> idBuilder =
- InstanceIdentifier.builder(Pools.class).child(IdPool.class, new IdPoolKey(poolName));
- InstanceIdentifier<IdPool> id = idBuilder.build();
- Optional<IdPool> pool = read(LogicalDatastoreType.OPERATIONAL, id);
- if (!pool.isPresent()) {
- LOG.debug("Creating a new global pool: %s " ,poolName);
- IdPool newPool = getPoolInterface(poolName, startIndx, poolSize);
- asyncWrite(LogicalDatastoreType.OPERATIONAL, id, newPool, DEFAULT_CALLBACK);
+ try {
+ InstanceIdentifier.InstanceIdentifierBuilder<IdPool> idBuilder =
+ InstanceIdentifier.builder(Pools.class).child(IdPool.class, new IdPoolKey(poolName));
+ InstanceIdentifier<IdPool> id = idBuilder.build();
+ Optional<IdPool> pool = read(LogicalDatastoreType.OPERATIONAL, id);
+ if (!pool.isPresent()) {
+ LOG.debug("Creating a new global pool: {} ", poolName);
+ IdPool newPool = getPoolInterface(poolName, startIndx, poolSize);
+ LOG.debug("NewPool: {}", newPool);
+ asyncWrite(LogicalDatastoreType.OPERATIONAL, id, newPool, DEFAULT_CALLBACK);
+ }
+
+ rpcResultBuilder = RpcResultBuilder.success();
+ }
+ catch(Exception e){
+ LOG.error("Creation of global pool {} failed due to {}" ,poolName, e);
+ rpcResultBuilder = RpcResultBuilder.failed();
}
- // return Futures.immediateFuture(RpcResult<Void>);
- return null;
+ return Futures.immediateFuture(rpcResultBuilder.build());
}
String poolName = input.getPoolName();
String idKey = input.getIdKey();
- LOG.debug("poolName: %s ,idKey: %s", poolName, idKey);
-
- InstanceIdentifier.InstanceIdentifierBuilder<IdPool> idBuilder =
- InstanceIdentifier.builder(Pools.class).child(IdPool.class, new IdPoolKey(poolName));
- InstanceIdentifier<IdPool> id = idBuilder.build();
- Optional<IdPool> globalPool = read(LogicalDatastoreType.OPERATIONAL, id);
- Long newIdValue = null;
- GeneratedIds newGenId = null;
- if (globalPool.isPresent()) {
- IdPool pool = globalPool.get();
- List<GeneratedIds> generatedIds = pool.getGeneratedIds();
-
- if (!generatedIds.isEmpty()) {
- for (GeneratedIds gen_id : generatedIds) {
- if (gen_id.getIdKey().equals(idKey)) {
- newIdValue = gen_id.getIdValue();
- LOG.debug("Existing id for the key %s ", idKey);
- }
+ LOG.debug("poolName: {} ,idKey: {}", poolName, idKey);
+ RpcResultBuilder<GetUniqueIdOutput> rpcResultBuilder;
+ try {
+ InstanceIdentifier.InstanceIdentifierBuilder<IdPool> idBuilder =
+ InstanceIdentifier.builder(Pools.class).child(IdPool.class, new IdPoolKey(poolName));
+ InstanceIdentifier<IdPool> id = idBuilder.build();
+ Optional<IdPool> globalPool = read(LogicalDatastoreType.OPERATIONAL, id);
+ GetUniqueIdOutputBuilder output = new GetUniqueIdOutputBuilder();
+ Long newIdValue = null;
+ GeneratedIds newGenId = null;
+ if (globalPool.isPresent()) {
+ IdPool pool = globalPool.get();
+ List<GeneratedIds> generatedIds = pool.getGeneratedIds();
+
+ if (generatedIds == null) {
+ generatedIds = new ArrayList<GeneratedIds>();
}
- }
- synchronized(this){
- if (newIdValue == null) {
- LOG.debug("Creating a new id for the pool: %s ", poolName);
- newIdValue = (long) generatedIds.size() + 1;
- newGenId = getIdsInterface(idKey, newIdValue);
- generatedIds.add(newGenId);
- asyncWrite(LogicalDatastoreType.OPERATIONAL, id, pool, DEFAULT_CALLBACK);
+ if (!generatedIds.isEmpty()) {
+ for (GeneratedIds gen_id : generatedIds) {
+ if (gen_id.getIdKey().equals(idKey)) {
+ newIdValue = gen_id.getIdValue();
+ LOG.debug("Existing id {} for the key {} ", idKey, newIdValue);
+ }
+
+ }
+ }
+ synchronized (this) {
+ if (newIdValue == null) {
+ newIdValue = (long) generatedIds.size() + 1;
+ LOG.debug("Creating a new id {} for the pool: {} ", newIdValue, poolName);
+ newGenId = getIdsInterface(idKey, newIdValue);
+ generatedIds.add(newGenId);
+ pool = new IdPoolBuilder(pool).setGeneratedIds(generatedIds).build();
+ asyncUpdate(LogicalDatastoreType.OPERATIONAL, id, pool, DEFAULT_CALLBACK);
+ }
}
+ output.setIdValue(newIdValue);
}
- GetUniqueIdOutputBuilder output = new GetUniqueIdOutputBuilder();
- output.setIdValue(newIdValue);
-
+ rpcResultBuilder = RpcResultBuilder.success();
+ rpcResultBuilder.withResult(output.build());
+ }
+ catch(Exception e){
+ LOG.error("Creation of id for the key {} , global pool {} failed due to {}" ,idKey, poolName, e);
+ rpcResultBuilder = RpcResultBuilder.failed();
}
- /* Collection<RpcError> errors = Collections.emptyList();
- RpcResult<GetUniqueIdOutput> result = Rpcs.getRpcResult(true, output.build(), errors);
- return Futures.immediateFuture(result);*/
- return null;
+ return Futures.immediateFuture(rpcResultBuilder.build());
}
}
private static final FutureCallback<Void> DEFAULT_CALLBACK =
- new FutureCallback<Void>() {
- public void onSuccess(Void result) {
- LOG.debug("Success in Datastore write operation");
- }
+ new FutureCallback<Void>() {
+ public void onSuccess(Void result) {
+ LOG.debug("Success in Datastore write operation");
+ }
- public void onFailure(Throwable error) {
- LOG.error("Error in Datastore write operation", error);
- };
+ public void onFailure(Throwable error) {
+ LOG.error("Error in Datastore write operation", error);
};
+ };
}
package org.opendaylight.idmanager;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger LOG = LoggerFactory.getLogger(IdManagerServiceProvider.class);
private IdManager idManager;
+ private RpcProviderRegistry rpcProviderRegistry;
+
+ public RpcProviderRegistry getRpcProviderRegistry() {
+ return rpcProviderRegistry;
+ }
+
+ public void setRpcProviderRegistry(RpcProviderRegistry rpcProviderRegistry) {
+ this.rpcProviderRegistry = rpcProviderRegistry;
+ }
@Override
- public void onSessionInitiated(ProviderContext session){
- LOG.info("IDManagerserviceProvider Session Initiated");
- try {
- final DataBroker dataBroker = session.getSALService(DataBroker.class);
- idManager = new IdManager(dataBroker);
- } catch (Exception e) {
- LOG.error("Error initializing services", e);
- }
+ public void onSessionInitiated(ProviderContext session){
+ LOG.info("IDManagerserviceProvider Session Initiated");
+ try {
+ final DataBroker dataBroker = session.getSALService(DataBroker.class);
+ idManager = new IdManager(dataBroker);
+ final BindingAwareBroker.RpcRegistration<IdManagerService> rpcRegistration = getRpcProviderRegistry().addRpcImplementation(IdManagerService.class, idManager);
+ } catch (Exception e) {
+ LOG.error("Error initializing services", e);
}
+ }
- @Override
- public void close() throws Exception {
- idManager.close();
+ public IdManagerServiceProvider(RpcProviderRegistry rpcRegistry) {
+ this.rpcProviderRegistry = rpcRegistry;
+ }
+
+ @Override
+ public void close() throws Exception {
+ idManager.close();
}
}
package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.idmanager.impl.rev150325;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
import org.opendaylight.idmanager.IdManagerServiceProvider;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService;
public class IdmanagerImplModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.idmanager.impl.rev150325.AbstractIdmanagerImplModule {
public IdmanagerImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
}
@Override
- public void customValidation() {
- // add custom validation form module attributes here.
+ public java.lang.AutoCloseable createInstance() {
+ IdManagerServiceProvider provider = new IdManagerServiceProvider(getRpcRegistryDependency());
+ getBrokerDependency().registerProvider(provider);
+ return provider;
}
@Override
- public java.lang.AutoCloseable createInstance() {
- IdManagerServiceProvider provider = new IdManagerServiceProvider();
- getBrokerDependency().registerProvider(provider);
- return provider;
+ public void customValidation() {
+ // add custom validation form module attributes here.
}
-
}
}
}
}
+ container rpc-registry {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity md-sal-binding:binding-rpc-registry;
+ }
+ }
+ }
+
}
}
}
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <groupId>org.opendaylight.controller</groupId>
+ <groupId>org.opendaylight.vpnservice</groupId>
<artifactId>config-parent</artifactId>
- <version>0.3.0-SNAPSHOT</version>
- <relativePath/>
+ <version>0.0.1-SNAPSHOT</version>
+ <relativePath>../../commons/config-parent</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>interfacemgr-api</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
<packaging>bundle</packaging>
- <properties>
- <!-- ODL -->
- <ietf.inet.types.version>2010.09.24.7-SNAPSHOT</ietf.inet.types.version>
- <ietf.yang.types.version>2010.09.24.7-SNAPSHOT</ietf.yang.types.version>
- <yang.ext.version>2013.09.07.7-SNAPSHOT</yang.ext.version>
- <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
- <mdsal.version>1.2.0-SNAPSHOT</mdsal.version>
- <vpns.mdsalutil.version>0.0.1-SNAPSHOT</vpns.mdsalutil.version>
- </properties>
<dependencies>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<dependency>
<groupId>org.opendaylight.yangtools.model</groupId>
<artifactId>ietf-interfaces</artifactId>
- <version>2014.05.08.7-SNAPSHOT</version>
+ <version>${ietf.interfaces.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.yangtools.model</groupId>
<artifactId>iana-if-type-2014-05-08</artifactId>
- <version>2014.05.08.7-SNAPSHOT</version>
+ <version>${iana.if.type.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.controller.model</groupId>
<?xml version="1.0" encoding="UTF-8"?>
<!-- vi: set et smarttab sw=4 tabstop=4: --><!--
-Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 which accompanies this distribution,
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <groupId>org.opendaylight.controller</groupId>
+ <groupId>org.opendaylight.vpnservice</groupId>
<artifactId>config-parent</artifactId>
- <version>0.3.0-SNAPSHOT</version>
- <relativePath/>
+ <version>0.0.1-SNAPSHOT</version>
+ <relativePath>../../commons/config-parent</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<dependency>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>vpnmanager-impl</artifactId>
- <version>1.0-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>mdsalutil-api</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>idmanager-api</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>idmanager-impl</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- </dependency>
- <!-- Testing Dependencies -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-all</artifactId>
- <scope>test</scope>
+ <version>${vpnservices.version}</version>
</dependency>
</dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-checkstyle-plugin</artifactId>
- <configuration>
- <configLocation>
- ${project.basedir}/../../commons/src/main/resources/vpns_checks.xml
- </configLocation>
- <failsOnError>true</failsOnError>
- <includes>**/*.java,**/*.xml,**/*.ini,**/*.sh,**/*.bat</includes>
- <excludes>**/yang/</excludes>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
</project>
public class IfmConstants {
public static final String IFM_IDPOOL_NAME = "interfaces";
+ public static final long IFM_IDPOOL_START = 1L;
+ public static final String IFM_IDPOOL_SIZE = "65535";
public static final String OF_URI_PREFIX = "openflow:";
- public static final String OF_URI_SEPARATOR = "openflow:";
- public static final int DEFAULT_IFINDEX = 65535;
+ public static final String OF_URI_SEPARATOR = ":";
+ public static final int DEFAULT_IFINDEX = 65536;
}
package org.opendaylight.vpnservice.interfacemgr;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.Pools;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.IdPool;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.IdPoolKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
-public class IfmUtil {
+public class IfmUtil {
- static String getDpnFromNodeConnectorId(NodeConnectorId portId) {
+ public static String getDpnFromNodeConnectorId(NodeConnectorId portId) {
/*
* NodeConnectorId is of form 'openflow:dpnid:portnum'
*/
}
- static NodeId buildDpnNodeId(long dpnId) {
+ public static NodeId buildDpnNodeId(long dpnId) {
return new NodeId(IfmConstants.OF_URI_PREFIX + dpnId);
}
+
+ public static InstanceIdentifier<Interface> buildId(String interfaceName) {
+ //TODO Make this generic and move to AbstractDataChangeListener or Utils.
+ InstanceIdentifierBuilder<Interface> idBuilder =
+ InstanceIdentifier.builder(Interfaces.class).child(Interface.class, new InterfaceKey(interfaceName));
+ InstanceIdentifier<Interface> id = idBuilder.build();
+ return id;
+ }
+
+ public static InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> buildStateInterfaceId(String interfaceName) {
+ InstanceIdentifierBuilder<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> idBuilder =
+ InstanceIdentifier.builder(InterfacesState.class)
+ .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.class,
+ new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey(interfaceName));
+ InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> id = idBuilder.build();
+ return id;
+ }
+
+ public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey getStateInterfaceKeyFromName(
+ String name) {
+ return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey(name);
+ }
+
+ public static InstanceIdentifier<IdPool> getPoolId(String poolName){
+ InstanceIdentifier.InstanceIdentifierBuilder<IdPool> idBuilder =
+ InstanceIdentifier.builder(Pools.class).child(IdPool.class, new IdPoolKey(poolName));
+ InstanceIdentifier<IdPool> id = idBuilder.build();
+ return id;
+ }
}
*/
package org.opendaylight.vpnservice.interfacemgr;
-
import com.google.common.base.Optional;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
-
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
-
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfaceType;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus;
import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.GetUniqueIdInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.GetUniqueIdInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.GetUniqueIdOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.Pools;
import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.IdPool;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.IdPoolKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.id.pool.GeneratedIds;
import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.BaseIds;
import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.IfL2vlan;
return id;
}
- private InstanceIdentifier
- <org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface>
- buildStateInterfaceId(String interfaceName) {
- //TODO Make this generic and move to AbstractDataChangeListener or Utils.
- InstanceIdentifierBuilder
- <org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface>
- idBuilder = InstanceIdentifier.builder(InterfacesState.class)
- .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.class,
- new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey(interfaceName));
- InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> id = idBuilder.build();
- return id;
- }
private void addInterface(final InstanceIdentifier<Interface> identifier,
final Interface interf) {
ncId = nodeConn.getId();
}
mapNcToInterfaceName.put(ncId, interf.getName());
- if(interf.getType().getClass().isInstance(L3tunnel.class)) {
+ if(interf.getType().isAssignableFrom(L3tunnel.class)) {
NodeId nodeId = getNodeIdFromNodeConnectorId(ncId);
IfL3tunnel l3Tunnel = interf.getAugmentation(IfL3tunnel.class);
dbDpnEndpoints.put(nodeId, l3Tunnel.getLocalIp().getIpv4Address().getValue());
* if-index = interface-id
*/
InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> id =
- buildStateInterfaceId(interf.getName());
+ IfmUtil.buildStateInterfaceId(interf.getName());
Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> stateIf =
read(LogicalDatastoreType.OPERATIONAL, id);
org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface stateIface;
ifaceBuilder.setOperStatus(getOperStatus(nodeConn));
ifaceBuilder.setIfIndex(getIfIndex(ifName)).setName(ifName).setType(interf.getType());
- ifaceBuilder.setKey(getStateInterfaceKeyFromName(ifName));
+ ifaceBuilder.setKey(IfmUtil.getStateInterfaceKeyFromName(ifName));
stateIface = ifaceBuilder.build();
LOG.trace("Adding stateIface {} and id {} to OPERATIONAL DS", stateIface, id);
asyncWrite(LogicalDatastoreType.OPERATIONAL, id, stateIface, DEFAULT_CALLBACK);
* TODO: Start-delete-me
*/
- InstanceIdentifier.InstanceIdentifierBuilder<IdPool> idBuilder =
- InstanceIdentifier.builder(Pools.class).child(IdPool.class, new IdPoolKey("interfaces"));
- InstanceIdentifier<IdPool> id = idBuilder.build();
- Optional<IdPool> globalPool = read(LogicalDatastoreType.OPERATIONAL, id);
+ InstanceIdentifier<IdPool> id = IfmUtil.getPoolId(IfmConstants.IFM_IDPOOL_NAME);
+ Optional<IdPool> globalPool = read(LogicalDatastoreType.OPERATIONAL, id );
Long newIdValue = null;
if (globalPool.isPresent()) {
IdPool pool = globalPool.get();
}
}
- private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey getStateInterfaceKeyFromName(
- String name) {
- return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey(name);
- }
-
private NodeConnector getNodeConnectorFromDataStore(Interface interf) {
NodeConnectorId ncId = interf.getAugmentation(BaseIds.class).getOfPortId();
//TODO: Replace with MDSAL Util method
private void delInterface(final InstanceIdentifier<Interface> identifier,
final Interface delInterface) {
InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> id =
- buildStateInterfaceId(delInterface.getName());
+ IfmUtil.buildStateInterfaceId(delInterface.getName());
Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> stateIf =
read(LogicalDatastoreType.OPERATIONAL, id);
if(stateIf.isPresent()) {
NodeConnectorId ncId = getNodeConnectorIdFromInterface(delInterface);
if(ncId != null) {
mapNcToInterfaceName.remove(ncId);
- if(delInterface.getType().getClass().isInstance(L3tunnel.class)) {
+ if(delInterface.getType().isAssignableFrom(L3tunnel.class)) {
Node node = getNodeFromDataStore(delInterface);
if((node != null) &&(node.getNodeConnector().isEmpty())) {
dbDpnEndpoints.remove(node.getId());
if(nc != null) {
// Name doesn't change. Is it present in update?
mapNcToInterfaceName.put(nc.getId(), original.getName());
- if(interf.getType().getClass().isInstance(L3tunnel.class)) {
+ if(interf.getType().isAssignableFrom(L3tunnel.class)) {
NodeId nodeId = getNodeIdFromNodeConnectorId(nc.getId());
IfL3tunnel l3Tunnel = interf.getAugmentation(IfL3tunnel.class);
dbDpnEndpoints.put(nodeId, l3Tunnel.getLocalIp().getIpv4Address().getValue());
updateInterface(identifier, original, update);
}
- private <T extends DataObject> void asyncWrite(LogicalDatastoreType datastoreType,
+ protected <T extends DataObject> void asyncWrite(LogicalDatastoreType datastoreType,
InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
- WriteTransaction tx = broker.newWriteOnlyTransaction();
- tx.put(datastoreType, path, data, true);
- Futures.addCallback(tx.submit(), callback);
+ WriteTransaction tx = broker.newWriteOnlyTransaction();
+ tx.put(datastoreType, path, data, true);
+ Futures.addCallback(tx.submit(), callback);
}
- private <T extends DataObject> void asyncUpdate(LogicalDatastoreType datastoreType,
+ protected <T extends DataObject> void asyncUpdate(LogicalDatastoreType datastoreType,
InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
- WriteTransaction tx = broker.newWriteOnlyTransaction();
- tx.merge(datastoreType, path, data, true);
- Futures.addCallback(tx.submit(), callback);
+ WriteTransaction tx = broker.newWriteOnlyTransaction();
+ tx.merge(datastoreType, path, data, true);
+ Futures.addCallback(tx.submit(), callback);
}
- private <T extends DataObject> void asyncRemove(LogicalDatastoreType datastoreType,
+ protected <T extends DataObject> void asyncRemove(LogicalDatastoreType datastoreType,
InstanceIdentifier<T> path, FutureCallback<Void> callback) {
- WriteTransaction tx = broker.newWriteOnlyTransaction();
- tx.delete(datastoreType, path);
- Futures.addCallback(tx.submit(), callback);
+ WriteTransaction tx = broker.newWriteOnlyTransaction();
+ tx.delete(datastoreType, path);
+ Futures.addCallback(tx.submit(), callback);
}
void processPortAdd(NodeConnector port) {
NodeConnectorId portId = port.getId();
FlowCapableNodeConnector ofPort = port.getAugmentation(FlowCapableNodeConnector.class);
- LOG.debug("PortAdd: PortId { "+portId.getValue()+"} PortName {"+ofPort.getName()+"}");
+ LOG.debug("PortAdd: PortId { " + portId.getValue() + "} PortName {" + ofPort.getName() + "}");
String ifName = this.mapNcToInterfaceName.get(portId);
setInterfaceOperStatus(ifName, OperStatus.Up);
}
private void setInterfaceOperStatus(String ifName, OperStatus opStatus) {
if (ifName != null) {
InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> id =
- buildStateInterfaceId(ifName);
+ IfmUtil.buildStateInterfaceId(ifName);
Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> stateIf =
read(LogicalDatastoreType.OPERATIONAL, id);
org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface stateIface;
long dpn = this.getDpnForInterface(ifName);
long portNo = this.getPortNumForInterface(iface).longValue();
matches.add(new MatchInfo(MatchFieldType.in_port, new long[] {dpn, portNo}));
+
if (ifType.isInstance(L2vlan.class)) {
IfL2vlan vlanIface = iface.getAugmentation(IfL2vlan.class);
long vlanVid = vlanIface.getVlanId().longValue();
if (vlanVid != 0) {
- matches.add(new MatchInfo(MatchFieldType.vlan_vid,
+ matches.add(new MatchInfo(MatchFieldType.vlan_vid,
new long[] {vlanVid}));
LOG.trace("L2Vlan: {}",vlanIface);
}
IfL3tunnel ifL3Tunnel = iface.getAugmentation(IfL3tunnel.class);
Class<? extends TunnelTypeBase> tunnType = ifL3Tunnel.getTunnelType();
LOG.trace("L3Tunnel: {}",ifL3Tunnel);
- } else if (ifType.getClass().isInstance(StackedVlan.class)) {
+ } else if (ifType.isAssignableFrom(StackedVlan.class)) {
IfStackedVlan ifStackedVlan = iface.getAugmentation(IfStackedVlan.class);
LOG.trace("StackedVlan: {}",ifStackedVlan);
- } else if (ifType.getClass().isInstance(Mpls.class)) {
+ } else if (ifType.isAssignableFrom(Mpls.class)) {
IfMpls ifMpls = iface.getAugmentation(IfMpls.class);
LOG.trace("Mpls: {}",ifMpls);
}
if (iface.isEnabled()) {
- if(ifType.isInstance(L2vlan.class)) {
+ if(ifType.isAssignableFrom(L2vlan.class)) {
IfL2vlan vlanIface = iface.getAugmentation(IfL2vlan.class);
long vlanVid = vlanIface.getVlanId();
LOG.trace("L2Vlan: {}",vlanIface);
new String[] { Long.toString(vlanVid) }));
}
listActionInfo.add(new ActionInfo(ActionType.output, new String[] { Long.toString(portNo)}));
-
- } else if (ifType.isInstance(L3tunnel.class)) {
+
+ } else if (ifType.isAssignableFrom(L3tunnel.class)) {
//TODO: Handle different tunnel types
IfL3tunnel ifL3Tunnel = iface.getAugmentation(IfL3tunnel.class);
Class<? extends TunnelTypeBase> tunnType = ifL3Tunnel.getTunnelType();
LOG.trace("L3Tunnel: {}",ifL3Tunnel);
//TODO: check switch_type and configure accordingly
listActionInfo.add(new ActionInfo(ActionType.output, new String[] { Long.toString(portNo)}));
-
- } else if (ifType.isInstance(StackedVlan.class)) {
+
+ } else if (ifType.isAssignableFrom(StackedVlan.class)) {
IfStackedVlan ifStackedVlan = iface.getAugmentation(IfStackedVlan.class);
LOG.trace("StackedVlan: {}",ifStackedVlan);
- // TBD
- } else if (ifType.isInstance(Mpls.class)) {
+ // TODO: TBD
+ } else if (ifType.isAssignableFrom(Mpls.class)) {
IfMpls ifMpls = iface.getAugmentation(IfMpls.class);
LOG.trace("Mpls: {}",ifMpls);
- // TBD
+ // TODO: TBD
}
}
return listActionInfo;
*/
package org.opendaylight.vpnservice.interfacemgr;
-import java.util.concurrent.ExecutionException;
import java.math.BigInteger;
import java.util.List;
+import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
-import org.opendaylight.vpnservice.mdsalutil.ActionInfo;
-import org.opendaylight.vpnservice.interfacemgr.interfaces.IInterfaceManager;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
import org.opendaylight.idmanager.IdManager;
import org.opendaylight.vpnservice.interfacemgr.interfaces.IInterfaceManager;
-import org.opendaylight.vpnservice.mdsalutil.InstructionInfo;
+import org.opendaylight.vpnservice.mdsalutil.ActionInfo;
import org.opendaylight.vpnservice.mdsalutil.MatchInfo;
import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.CreateIdPoolInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.CreateIdPoolInputBuilder;
private void createIdPool() {
CreateIdPoolInput createPool = new CreateIdPoolInputBuilder()
- .setPoolName("interfaces")
- .setIdStart(1L)
- .setPoolSize(new BigInteger("65535"))
- .build();
+ .setPoolName(IfmConstants.IFM_IDPOOL_NAME)
+ .setIdStart(IfmConstants.IFM_IDPOOL_START)
+ .setPoolSize(new BigInteger(IfmConstants.IFM_IDPOOL_SIZE))
+ .build();
//TODO: Error handling
Future<RpcResult<Void>> result = idManager.createIdPool(createPool);
try {
- if((result != null) && (result.get().isSuccessful())) {
+ if ((result != null) && (result.get().isSuccessful())) {
LOG.debug("Created IdPool for InterfaceMgr");
}
} catch (InterruptedException | ExecutionException e) {
--- /dev/null
+package org.opendaylight.vpnservice.interfacemgr.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.when;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.opendaylight.vpnservice.interfacemgr.IfmUtil;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
+
+public class IfmUtilTest {
+
+ @Mock NodeConnectorId ncId;
+ MockDataChangedEvent event;
+
+ @Before
+ public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
+ }
+
+ @Test
+ public void testDpnConversions() {
+ String NodeId = IfmUtil.buildDpnNodeId(101L).getValue();
+ assertEquals("openflow:101", NodeId);
+ when(ncId.getValue()).thenReturn("openflow:101:11");
+ assertEquals("101",IfmUtil.getDpnFromNodeConnectorId(ncId));
+ }
+
+}
--- /dev/null
+package org.opendaylight.vpnservice.interfacemgr.test;
+
+import static org.junit.Assert.*;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.idmanager.IdManager;
+import org.opendaylight.vpnservice.interfacemgr.IfmUtil;
+import org.opendaylight.vpnservice.interfacemgr.InterfaceManager;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfaceType;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.IdPool;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.BaseIds;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.BaseIdsBuilder;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+@RunWith(MockitoJUnitRunner.class)
+public class InterfaceManagerTest {
+
+ private String ifName = "dpn1-if0";
+ Map<InstanceIdentifier<?>,DataObject> written = new HashMap<>();
+ Map<InstanceIdentifier<?>,DataObject> updated = new HashMap<>();
+ Set<InstanceIdentifier<?>> removed = new HashSet<>();
+
+ @Mock DataBroker dataBroker;
+ @Mock IdManager idManager;
+ @Mock ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
+ @Mock ReadOnlyTransaction mockReadTx;
+ @Mock WriteTransaction mockWriteTx;
+
+ MockDataChangedEvent dataChangeEvent;
+ InterfaceManager imgr;
+
+ NodeConnectorId ncId;
+ NodeConnector nc;
+ Interface interf;
+ InstanceIdentifier<Interface> ifIdent;
+ InstanceIdentifier<NodeConnector> ncIdent;
+ InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> ifsIdent;
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface stateIface;
+ InstanceIdentifier<IdPool> poolIdent;
+
+ @Before
+ public void setUp() throws Exception {
+ when(dataBroker.registerDataChangeListener(
+ any(LogicalDatastoreType.class),
+ any(InstanceIdentifier.class),
+ any(DataChangeListener.class),
+ any(DataChangeScope.class)))
+ .thenReturn(dataChangeListenerRegistration);
+ dataChangeEvent = new MockDataChangedEvent();
+ imgr = new InterfaceManager(dataBroker, idManager) {
+ protected <T extends DataObject> void asyncWrite(LogicalDatastoreType datastoreType,
+ InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
+ /*
+ * Do nothing for now. Ideally we should capture this information
+ * and use it to verify results.
+ */
+ written.put(path, data);
+ }
+ protected <T extends DataObject> void asyncUpdate(LogicalDatastoreType datastoreType,
+ InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
+ updated.put(path, data);
+ }
+
+ protected <T extends DataObject> void asyncRemove(LogicalDatastoreType datastoreType,
+ InstanceIdentifier<T> path, FutureCallback<Void> callback) {
+ removed.add(path);
+ }
+
+ };
+ setupMocks();
+ }
+
+ private void setupMocks() {
+ ncId = new NodeConnectorId("openflow:10:111");
+ nc = buildNodeConnector(ncId);
+ interf = buildInterface(ifName, "Test Interface1", true, L2vlan.class, ncId);
+ ifIdent = IfmUtil.buildId(ifName);
+ ncIdent = getNcIdent("openflow:10",ncId);
+ ifsIdent = IfmUtil.buildStateInterfaceId(interf.getName());
+ stateIface = buildStateInterface(ifName);
+ poolIdent = IfmUtil.getPoolId("interfaces");
+
+ // Setup mocks
+ when(dataBroker.newReadOnlyTransaction()).thenReturn(mockReadTx);
+ when(dataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTx);
+ }
+
+ @Test
+ public void testAdd() {
+ Optional<Interface> expected = Optional.of(interf);
+ Optional<NodeConnector> expectedNc = Optional.of(nc);
+ doReturn(Futures.immediateCheckedFuture(expected)).when(mockReadTx).read(
+ LogicalDatastoreType.CONFIGURATION, ifIdent);
+ doReturn(Futures.immediateCheckedFuture(expectedNc)).when(mockReadTx).read(
+ LogicalDatastoreType.OPERATIONAL, ncIdent);
+ doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
+ LogicalDatastoreType.OPERATIONAL, ifsIdent);
+ doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
+ LogicalDatastoreType.OPERATIONAL, poolIdent);
+
+ dataChangeEvent.created.put(IfmUtil.buildId(ifName), interf);
+ imgr.onDataChanged(dataChangeEvent);
+ //Add some verifications
+ assertEquals(1,written.size());
+ assertEquals(0,updated.size());
+ assertEquals(0, removed.size());
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface writtenIface =
+ (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface)written.get(ifsIdent);
+ assertEquals(stateIface.getKey(), writtenIface.getKey());
+ assertEquals(65536, writtenIface.getIfIndex().intValue());
+ assertEquals(OperStatus.Up, writtenIface.getOperStatus());
+ }
+
+ @Test
+ public void testUpdate() {
+ Optional<Interface> expected = Optional.of(interf);
+ Optional<NodeConnector> expectedNc = Optional.of(nc);
+ Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> expectedStateIf = Optional.of(stateIface);
+ doReturn(Futures.immediateCheckedFuture(expected)).when(mockReadTx).read(
+ LogicalDatastoreType.CONFIGURATION, ifIdent);
+ doReturn(Futures.immediateCheckedFuture(expectedNc)).when(mockReadTx).read(
+ LogicalDatastoreType.OPERATIONAL, ncIdent);
+ doReturn(Futures.immediateCheckedFuture(expectedStateIf)).when(mockReadTx).read(
+ LogicalDatastoreType.OPERATIONAL, ifsIdent);
+ doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
+ LogicalDatastoreType.OPERATIONAL, poolIdent);
+ dataChangeEvent.original.put(IfmUtil.buildId(ifName), interf);
+ dataChangeEvent.updated.put(IfmUtil.buildId(ifName), interf);
+ imgr.onDataChanged(dataChangeEvent);
+ //Add some verifications
+
+ assertEquals(0,written.size());
+ assertEquals(1,updated.size());
+ assertEquals(0, removed.size());
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface updatedIface =
+ (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface)updated.get(ifsIdent);
+ assertNotEquals(stateIface.getKey(),updatedIface.getKey());
+ assertNull(updatedIface.getIfIndex());
+ assertEquals(OperStatus.Up, updatedIface.getOperStatus());
+ }
+
+ private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface buildStateInterface(
+ String ifName) {
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder ifaceBuilder =
+ new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder();
+ ifaceBuilder.setKey(IfmUtil.getStateInterfaceKeyFromName(ifName));
+ return ifaceBuilder.build();
+ }
+
+ private InstanceIdentifier<NodeConnector> getNcIdent(String nodeKey, NodeConnectorId ncId) {
+ return InstanceIdentifier.builder(Nodes.class)
+ .child(Node.class, new NodeKey(new NodeId(nodeKey)))
+ .child(NodeConnector.class, new NodeConnectorKey(ncId))
+ .build();
+ }
+
+ private Interface buildInterface(String ifName, String desc, boolean enabled, Class<? extends InterfaceType> ifType, NodeConnectorId ncId) {
+ InterfaceBuilder builder = new InterfaceBuilder().setKey(new InterfaceKey(ifName)).setName(ifName)
+ .setDescription(desc).setEnabled(enabled).setType(ifType);
+
+ BaseIds baseId = new BaseIdsBuilder().setOfPortId(ncId).build();
+ builder.addAugmentation(BaseIds.class, baseId);
+ return builder.build();
+ }
+
+ private NodeConnector buildNodeConnector(NodeConnectorId ncId) {
+ NodeConnectorBuilder ncBuilder = new NodeConnectorBuilder()
+ .setId(ncId)
+ .setKey(new NodeConnectorKey(ncId));
+ return ncBuilder.build();
+ }
+
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.vpnservice.interfacemgr.test;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+class MockDataChangedEvent implements AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> {
+ Map<InstanceIdentifier<?>,DataObject> created = new HashMap<>();
+ Map<InstanceIdentifier<?>,DataObject> updated = new HashMap<>();
+ Map<InstanceIdentifier<?>,DataObject> original = new HashMap<>();
+ Set<InstanceIdentifier<?>> removed = new HashSet<>();
+
+ @Override
+ public Map<InstanceIdentifier<?>, DataObject> getCreatedData() {
+ return created;
+ }
+
+ @Override
+ public Map<InstanceIdentifier<?>, DataObject> getUpdatedData() {
+ return updated;
+ }
+
+ @Override
+ public Set<InstanceIdentifier<?>> getRemovedPaths() {
+ return removed;
+ }
+
+ @Override
+ public Map<InstanceIdentifier<?>, DataObject> getOriginalData() {
+ return original;
+ }
+
+ @Override
+ public DataObject getOriginalSubtree() {
+ throw new UnsupportedOperationException("Not implemented by mock");
+ }
+
+ @Override
+ public DataObject getUpdatedSubtree() {
+ throw new UnsupportedOperationException("Not implemented by mock");
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.vpnservice.mdsalutil;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * AbstractDataChangeListener implemented basic {@link DataChangeListener} processing for
+ * MDSAL Data Objects.
+ */
+public abstract class AbstractDataChangeListener<T extends DataObject> implements DataChangeListener {
+
+ protected final Class<T> clazz;
+
+ /**
+ * @param clazz - for which the data change event is received
+ */
+ public AbstractDataChangeListener(Class<T> clazz) {
+ this.clazz = Preconditions.checkNotNull(clazz, "Class can not be null!");
+ }
+
+ @Override
+ public void onDataChanged(final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changeEvent) {
+ Preconditions.checkNotNull(changeEvent,"Async ChangeEvent can not be null!");
+
+ /* All DataObjects for create */
+ final Map<InstanceIdentifier<?>, DataObject> createdData = changeEvent.getCreatedData() != null
+ ? changeEvent.getCreatedData() : Collections.<InstanceIdentifier<?>, DataObject>emptyMap();
+ /* All DataObjects for remove */
+ final Set<InstanceIdentifier<?>> removeData = changeEvent.getRemovedPaths() != null
+ ? changeEvent.getRemovedPaths() : Collections.<InstanceIdentifier<?>>emptySet();
+ /* All DataObjects for updates */
+ final Map<InstanceIdentifier<?>, DataObject> updateData = changeEvent.getUpdatedData() != null
+ ? changeEvent.getUpdatedData() : Collections.<InstanceIdentifier<?>, DataObject>emptyMap();
+ /* All Original DataObjects */
+ final Map<InstanceIdentifier<?>, DataObject> originalData = changeEvent.getOriginalData() != null
+ ? changeEvent.getOriginalData() : Collections.<InstanceIdentifier<?>, DataObject>emptyMap();
+
+ this.createData(createdData);
+ this.updateData(updateData, originalData);
+ this.removeData(removeData, originalData);
+ }
+
+ @SuppressWarnings("unchecked")
+ private void createData(final Map<InstanceIdentifier<?>, DataObject> createdData) {
+ final Set<InstanceIdentifier<?>> keys = createdData.keySet() != null
+ ? createdData.keySet() : Collections.<InstanceIdentifier<?>>emptySet();
+ for (InstanceIdentifier<?> key : keys) {
+ if (clazz.equals(key.getTargetType())) {
+ InstanceIdentifier<T> createKeyIdent = key.firstIdentifierOf(clazz);
+ final Optional<DataObject> value = Optional.of(createdData.get(key));
+ if (value.isPresent()) {
+ this.add(createKeyIdent, (T)value.get());
+ }
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private void updateData(final Map<InstanceIdentifier<?>, DataObject> updateData,
+ final Map<InstanceIdentifier<?>, DataObject> originalData) {
+
+ final Set<InstanceIdentifier<?>> keys = updateData.keySet() != null
+ ? updateData.keySet() : Collections.<InstanceIdentifier<?>>emptySet();
+ for (InstanceIdentifier<?> key : keys) {
+ if (clazz.equals(key.getTargetType())) {
+ InstanceIdentifier<T> updateKeyIdent = key.firstIdentifierOf(clazz);
+ final Optional<DataObject> value = Optional.of(updateData.get(key));
+ final Optional<DataObject> original = Optional.of(originalData.get(key));
+ if (value.isPresent() && original.isPresent()) {
+ this.update(updateKeyIdent, (T)original.get(), (T)value.get());
+ }
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private void removeData(final Set<InstanceIdentifier<?>> removeData,
+ final Map<InstanceIdentifier<?>, DataObject> originalData) {
+
+ for (InstanceIdentifier<?> key : removeData) {
+ if (clazz.equals(key.getTargetType())) {
+ final InstanceIdentifier<T> ident = key.firstIdentifierOf(clazz);
+ final DataObject removeValue = originalData.get(key);
+ this.remove(ident, (T)removeValue);
+ }
+ }
+ }
+
+ protected abstract void remove(InstanceIdentifier<T> identifier, T del);
+
+ protected abstract void update(InstanceIdentifier<T> identifier, T original, T update);
+
+ protected abstract void add(InstanceIdentifier<T> identifier, T add);
+
+}
+
+
}
},
- /**
- * The action info passed to this ActionType should have two actionValues string.
- *
- * The first string representing the metadata and the next string representing the metadatamask
- */
- /*
- filter_equals {
-
- @Override
- public Action buildAction(ActionInfo actionInfo) {
- String[] actionValues = actionInfo.getActionValues();
- if (actionValues == null || actionValues.length != 2) {
- throw new RuntimeException("Filter Equal set field action should have two arguments for metadata and metadata mask");
- }
- final BigInteger metaData = new BigInteger(actionValues[0]);
- final BigInteger metadataMask = new BigInteger(actionValues[1]);
- return new ActionBuilder()
- .setAction(
- new ExperimenterActionTypeBuilder().setActionType(
- new FilterTypesActionBuilder()
- .setFilterType(EricFilterTypes.ERICFTEQUAL)
- .setMetadata(
- new MetadataBuilder().setMetadata(metaData).setMetadataMask(metadataMask).build())
- .build())//Filter Equal Action Type
- .build())//Experimenter Action
- .setKey(new ActionKey(actionInfo.getActionKey()))
- .build();
- }
- },
- */
-
pop_mpls {
@Override
public Action buildAction(ActionInfo actionInfo) {
.setKey(new ActionKey(actionInfo.getActionKey())).build();
}
},
-/*
- pop_vxlan {
- @Override
- public Action buildAction(ActionInfo actionInfo) {
- return new ActionBuilder().setAction(
- new ExperimenterActionTypeBuilder().setActionType(
- new VxlanPopActionBuilder().build()).build())
- .setKey(new ActionKey(actionInfo.getActionKey())).build();
- }
- },
- */
-/*
- pop_gre {
- @Override
- public Action buildAction(ActionInfo actionInfo) {
- return new ActionBuilder().setAction(
- new ExperimenterActionTypeBuilder().setActionType(
- new GrePopActionBuilder().build()).build())
- .setKey(new ActionKey(actionInfo.getActionKey())).build();
- }
- },
-*/
+
push_mpls {
@Override
public Action buildAction(ActionInfo actionInfo) {
.setKey(new ActionKey(actionInfo.getActionKey())).build();
}
},
-/*
- push_vxlan {
- @Override
- public Action buildAction(ActionInfo actionInfo) {
- return new ActionBuilder().setAction(
- new ExperimenterActionTypeBuilder().setActionType(
- new VxlanPushActionBuilder().setEthType(0x0800).build()).build())
- .setKey(new ActionKey(actionInfo.getActionKey())).build();
- }
- },
- */
-/*
- push_gre {
- @Override
- public Action buildAction(ActionInfo actionInfo) {
- return new ActionBuilder().setAction(
- new ExperimenterActionTypeBuilder().setActionType(
- new GrePushActionBuilder().setEthType(0x0800).build()).build())
- .setKey(new ActionKey(actionInfo.getActionKey())).build();
- }
- },
-*/
+
set_field_mpls_label {
@Override
public Action buildAction(ActionInfo actionInfo) {
m_groupBuilder.setGroupName(getGroupName());
m_groupBuilder.setGroupType(getGroupType());
m_groupBuilder.setBuckets(MDSALUtil.buildBuckets(getBucketInfoList()));
-
- // m_groupBuilder.setResyncFlag(getResyncFlag());
}
return m_groupBuilder;
clear_actions {
@Override
public Instruction buildInstruction(InstructionInfo instructionInfo, int instructionKey) {
- // ClearActions clearActions = new
- // ClearActionsBuilder().setAction(listAction).build();
+
ClearActionsCase clearActionsCase = new ClearActionsCaseBuilder().build();
InstructionBuilder instructionBuilder = new InstructionBuilder();
--- /dev/null
+package org.opendaylight.vpnservice.mdsalutil;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+public class MDSALDataStoreUtils {
+
+ public <T extends DataObject> Optional<T> read(final DataBroker broker,final LogicalDatastoreType datastoreType,
+ InstanceIdentifier<T> path) {
+
+ ReadOnlyTransaction tx = broker.newReadOnlyTransaction();
+
+ Optional<T> result = Optional.absent();
+ try {
+ result = tx.read(datastoreType, path).get();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ return result;
+ }
+
+ public static <T extends DataObject> void asyncWrite(final DataBroker broker, final LogicalDatastoreType datastoreType,
+ InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
+ WriteTransaction tx = broker.newWriteOnlyTransaction();
+ tx.put(datastoreType, path, data, true);
+ Futures.addCallback(tx.submit(), callback);
+ }
+
+ public <T extends DataObject> void asyncUpdate(final DataBroker broker,final LogicalDatastoreType datastoreType,
+ InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
+ WriteTransaction tx = broker.newWriteOnlyTransaction();
+ tx.merge(datastoreType, path, data, true);
+ Futures.addCallback(tx.submit(), callback);
+ }
+
+ public <T extends DataObject> void asyncRemove(final DataBroker broker,final LogicalDatastoreType datastoreType,
+ InstanceIdentifier<T> path, FutureCallback<Void> callback) {
+ WriteTransaction tx = broker.newWriteOnlyTransaction();
+ tx.delete(datastoreType, path);
+ Futures.addCallback(tx.submit(), callback);
+ }
+
+}
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingQueue;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetFlowStatisticsFromFlowTableInput;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetFlowStatisticsFromFlowTableInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupStatisticsInput;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupStatisticsInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
public class MDSALUtil {
public static final String NODE_PREFIX = "openflow";
- public static final String SEPARATOR = ":"; // TODO name separtor correctly
-
+ public static final String SEPARATOR = ":";
private static final Buckets EMPTY_Buckets = new BucketsBuilder().build();
private static final Instructions EMPTY_Instructions = new InstructionsBuilder().setInstruction(
new ArrayList<Instruction>()).build();
private static final Match EMPTY_Matches = new MatchBuilder().build();
- // public static Map<Long, SyncStatus> syncStatusMap = new
- // ConcurrentHashMap<Long, SyncStatus>();
- public static Map<Long, LinkedBlockingQueue<Object>> lportMap = new ConcurrentHashMap<Long, LinkedBlockingQueue<Object>>();
- public static Map<Long, LinkedBlockingQueue<Object>> lportDownMap = new ConcurrentHashMap<Long, LinkedBlockingQueue<Object>>();
- // public static Map<String, Boolean> ofRefMap = new
- // ConcurrentHashMap<String, Boolean>();
- public static Map<Long, Map<String, Boolean>> ofRefMapDpn = new ConcurrentHashMap<Long, Map<String, Boolean>>();
- public static Map<Long, Map<Integer, String>> ofRefGroupMapDpn = new ConcurrentHashMap<Long, Map<Integer, String>>();
- public static Map<Long, Map<String, String>> ofRefFlowMapDpn = new ConcurrentHashMap<Long, Map<String, String>>();
-
public static FlowEntity buildFlowEntity(long dpnId, short tableId, String flowId, int priority, String flowName,
int idleTimeOut, int hardTimeOut, BigInteger cookie, List<MatchInfo> listMatchInfo,
List<InstructionInfo> listInstructionInfo) {
return flowEntity;
}
- // TODO FIX ME
- /*
- public static Flow buildResyncFlow(short tableId, String flowId, int priority, String flowName, int idleTimeOut,
- int hardTimeOut, BigInteger cookie, List<MatchInfo> listMatchInfo,
- List<InstructionInfo> listInstructionInfo, boolean isStrict, boolean isResync) {
- FlowKey key = new FlowKey(new FlowId(flowId));
- return new FlowBuilder().setMatch(buildMatches(listMatchInfo)).setKey(key)
- .setPriority(Integer.valueOf(priority)).setInstructions(buildInstructions(listInstructionInfo))
- .setBarrier(false).setInstallHw(true).setHardTimeout(hardTimeOut).setIdleTimeout(idleTimeOut)
- .setFlowName(flowName).setTableId(Short.valueOf(tableId)).setStrict(isStrict)
- .setCookie(new FlowCookie(cookie)).setResyncFlag(isResync).build();
- }
- */
// TODO: CHECK IF THIS IS USED
public static Flow buildFlow(short tableId, String flowId, int priority, String flowName, int idleTimeOut,
int hardTimeOut, BigInteger cookie, List<MatchInfo> listMatchInfo, List<InstructionInfo> listInstructionInfo) {
.setCookie(new FlowCookie(cookie)).build();
}
- // TODO FIX ME
- /*
- public static Flow buildResyncFlow(short tableId, String flowId, int priority, String flowName, int idleTimeOut,
- int hardTimeOut, BigInteger cookie, List<MatchInfo> listMatchInfo,
- List<InstructionInfo> listInstructionInfo, boolean isStrict, boolean isResync, boolean isSendFlowRem) {
- FlowKey key = new FlowKey(new FlowId(flowId));
- return new FlowBuilder().setMatch(buildMatches(listMatchInfo)).setKey(key)
- .setPriority(Integer.valueOf(priority)).setInstructions(buildInstructions(listInstructionInfo))
- .setBarrier(false).setInstallHw(true).setHardTimeout(hardTimeOut).setIdleTimeout(idleTimeOut)
- .setFlowName(flowName).setTableId(Short.valueOf(tableId)).setStrict(isStrict)
- .setCookie(new FlowCookie(cookie))
- .setFlags(new FlowModFlags(false, false, false, false, isSendFlowRem)).setResyncFlag(isResync).build();
-
- }
- */
-/*
- public static Flow buildFlow(short tableId, String flowId, int priority, String flowName, int idleTimeOut,
- int hardTimeOut, BigInteger cookie, List<MatchInfo> listMatchInfo,
- List<InstructionInfo> listInstructionInfo, boolean isStrict, boolean isSendFlowRem) {
- return buildResyncFlow(tableId, flowId, priority, flowName, idleTimeOut, hardTimeOut, cookie, listMatchInfo,
- listInstructionInfo, isStrict, false, isSendFlowRem);
-
- }
-*/
-
-
public static GroupEntity buildGroupEntity(long dpnId, long groupId, String groupName, GroupTypes groupType,
List<BucketInfo> listBucketInfo) {
return groupEntity;
}
- // FIXME -- AS ReSync is not required for ODL VPN Service
- /*
- public static Group buildGroup(long groupId, String groupName, GroupTypes groupType, List<BucketInfo> listBucketInfo) {
- return buildGroup(groupId, groupName, groupType, listBucketInfo, false);
- }
-
- public static Group buildGroup(long groupId, String groupName, GroupTypes groupType,
- List<BucketInfo> listBucketInfo, boolean isResync) {
- return new GroupBuilder().setBuckets(buildBuckets(listBucketInfo)).setKey(new GroupKey(new GroupId(groupId)))
- .setBarrier(false).setGroupId(new GroupId(Long.valueOf(groupId))).setGroupType(groupType)
- .setGroupName(groupName).setResyncFlag(isResync).build();
- }
-*/
- // Removing --Missing Constraint
- /*
- public static GetFlowStatisticsFromFlowTableInput buildGetFlowStatisticsFromFlowTableInput(short tableId,
- List<MatchInfo> listMatchInfo, long dpnId) {
- return new GetFlowStatisticsFromFlowTableInputBuilder()
- .setTableId(Short.valueOf(tableId))
- .setMatch(buildMatches(listMatchInfo))
- .setNode(
- new NodeRef(InstanceIdentifier.builder(Nodes.class)
- .child(Node.class, new NodeKey(new NodeId("openflow:" + dpnId))).toInstance())).build();
-
- }
-
- public static GetGroupStatisticsInput buildGetGroupStatistics(long groupId, long dpnId) {
- return new GetGroupStatisticsInputBuilder()
- .setGroupId(new GroupId(Long.valueOf(groupId)))
- .setNode(
- new NodeRef(InstanceIdentifier.builder(Nodes.class)
- .child(Node.class, new NodeKey(new NodeId("openflow:" + dpnId))).toInstance())).build();
- }
- */
-
public static TransmitPacketInput getPacketOutDefault(List<ActionInfo> actionInfos, byte[] payload, long dpnId) {
return new TransmitPacketInputBuilder()
.setAction(buildActions(actionInfos))
import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelId;
public enum MatchFieldType {
- eth_src {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return EthSrc.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
- .get(EthernetMatchBuilder.class);
-
- if (ethernetMatchBuilder == null) {
- ethernetMatchBuilder = new EthernetMatchBuilder();
- mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
- }
-
- ethernetMatchBuilder.setEthernetSource(new EthernetSourceBuilder().setAddress(
- new MacAddress(matchInfo.getStringMatchValues()[0])).build());
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
- .remove(EthernetMatchBuilder.class);
-
- if (ethernetMatchBuilder != null) {
- matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
- }
- }
- },
-
- eth_dst {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return EthDst.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
- .get(EthernetMatchBuilder.class);
-
- if (ethernetMatchBuilder == null) {
- ethernetMatchBuilder = new EthernetMatchBuilder();
- mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
- }
-
- ethernetMatchBuilder.setEthernetDestination(new EthernetDestinationBuilder().setAddress(
- new MacAddress(matchInfo.getStringMatchValues()[0])).build());
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
- .remove(EthernetMatchBuilder.class);
-
- if (ethernetMatchBuilder != null) {
- matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
- }
- }
- },
-
- eth_type {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return EthType.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
- .get(EthernetMatchBuilder.class);
-
- if (ethernetMatchBuilder == null) {
- ethernetMatchBuilder = new EthernetMatchBuilder();
- mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
- }
-
- ethernetMatchBuilder.setEthernetType(new EthernetTypeBuilder().setType(
- new EtherType(matchInfo.getMatchValues()[0])).build());
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
- .remove(EthernetMatchBuilder.class);
-
- if (ethernetMatchBuilder != null) {
- matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
- }
- }
- },
-
- in_port {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return InPort.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- // NodeConnectorId format -> openflow:<dpnId>:<portId>
- StringBuffer nodeConnectorId = new StringBuffer().append("openflow:").append(matchInfo.getMatchValues()[0])
- .append(':').append(matchInfo.getMatchValues()[1]);
- matchBuilderInOut.setInPort(new NodeConnectorId(nodeConnectorId.toString()));
- }
- },
-
- ip_proto {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return IpProto.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.get(IpMatchBuilder.class);
-
- if (ipMatchBuilder == null) {
- ipMatchBuilder = new IpMatchBuilder();
- mapMatchBuilder.put(IpMatchBuilder.class, ipMatchBuilder);
- }
-
- ipMatchBuilder.setIpProtocol(Short.valueOf((short) matchInfo.getMatchValues()[0])).build();
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.remove(IpMatchBuilder.class);
-
- if (ipMatchBuilder != null) {
- matchBuilderInOut.setIpMatch(ipMatchBuilder.build());
- }
- }
- },
-
- ipv4_dst {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return Ipv4Dst.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
-
- if (ipv4MatchBuilder == null) {
- ipv4MatchBuilder = new Ipv4MatchBuilder();
- mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
- }
-
- long[] prefix = matchInfo.getMatchValues();
- ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1]))).build();
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
-
- if (ipv4MatchBuilder != null) {
- matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
- }
- }
- },
-
- ipv4_src {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return Ipv4Src.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
-
- if (ipv4MatchBuilder == null) {
- ipv4MatchBuilder = new Ipv4MatchBuilder();
- mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
- }
-
- long[] prefix = matchInfo.getMatchValues();
- ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1]))).build();
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
-
- if (ipv4MatchBuilder != null) {
- matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
- }
- }
- },
-
- arp_op {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return ArpOp.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
-
- if (arpMatchBuilder == null) {
- arpMatchBuilder = new ArpMatchBuilder();
- mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
- }
-
- arpMatchBuilder.setArpOp(Integer.valueOf((int) matchInfo.getMatchValues()[0]));
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
-
- if (arpMatchBuilder != null) {
- matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
- }
- }
- },
-
- arp_tpa {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return ArpTpa.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
-
- if (arpMatchBuilder == null) {
- arpMatchBuilder = new ArpMatchBuilder();
- mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
- }
-
- long[] prefix = matchInfo.getMatchValues();
- arpMatchBuilder.setArpTargetTransportAddress(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1])));
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
-
- if (arpMatchBuilder != null) {
- matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
- }
- }
- },
-
- arp_spa {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return ArpSpa.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
-
- if (arpMatchBuilder == null) {
- arpMatchBuilder = new ArpMatchBuilder();
- mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
- }
-
- long[] prefix = matchInfo.getMatchValues();
- arpMatchBuilder.setArpSourceTransportAddress(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1])));
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
-
- if (arpMatchBuilder != null) {
- matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
- }
- }
- },
-
- metadata {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return Metadata.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.get(MetadataBuilder.class);
-
- if (metadataBuilder == null) {
- metadataBuilder = new MetadataBuilder();
- mapMatchBuilder.put(MetadataBuilder.class, metadataBuilder);
- }
-
- BigInteger[] metadataValues = matchInfo.getBigMatchValues();
- metadataBuilder.setMetadata(metadataValues[0]).setMetadataMask(metadataValues[1]).build();
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.remove(MetadataBuilder.class);
-
- if (metadataBuilder != null) {
- matchBuilderInOut.setMetadata(metadataBuilder.build());
- }
- }
- },
-
- mpls_label {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return MplsLabel.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
- .get(ProtocolMatchFieldsBuilder.class);
-
- if (protocolMatchFieldsBuilder == null) {
- protocolMatchFieldsBuilder = new ProtocolMatchFieldsBuilder();
- mapMatchBuilder.put(ProtocolMatchFieldsBuilder.class, protocolMatchFieldsBuilder);
- }
-
- protocolMatchFieldsBuilder.setMplsLabel(Long.valueOf(matchInfo.getStringMatchValues()[0])).build();
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
- .remove(ProtocolMatchFieldsBuilder.class);
-
- if (protocolMatchFieldsBuilder != null) {
- matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build());
- }
- }
- },
-
- pbb_isid {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return PbbIsid.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
- .get(ProtocolMatchFieldsBuilder.class);
-
- if (protocolMatchFieldsBuilder == null) {
- protocolMatchFieldsBuilder = new ProtocolMatchFieldsBuilder();
- mapMatchBuilder.put(ProtocolMatchFieldsBuilder.class, protocolMatchFieldsBuilder);
- }
-
- protocolMatchFieldsBuilder.setPbb(new PbbBuilder().setPbbIsid(Long.valueOf(matchInfo.getMatchValues()[0]))
- .build());
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
- .remove(ProtocolMatchFieldsBuilder.class);
-
- if (protocolMatchFieldsBuilder != null) {
- matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build());
- }
- }
- },
-
- tcp_dst {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return TcpDst.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.get(TcpMatchBuilder.class);
-
- if (tcpMatchBuilder == null) {
- tcpMatchBuilder = new TcpMatchBuilder();
- mapMatchBuilder.put(TcpMatchBuilder.class, tcpMatchBuilder);
- }
-
- tcpMatchBuilder.setTcpDestinationPort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class);
-
- if (tcpMatchBuilder != null) {
- matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build());
- }
- }
- },
-
- tcp_src {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return TcpSrc.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.get(TcpMatchBuilder.class);
-
- if (tcpMatchBuilder == null) {
- tcpMatchBuilder = new TcpMatchBuilder();
- mapMatchBuilder.put(TcpMatchBuilder.class, tcpMatchBuilder);
- }
-
- tcpMatchBuilder.setTcpSourcePort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class);
-
- if (tcpMatchBuilder != null) {
- matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build());
- }
- }
- },
-
- udp_dst {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return UdpDst.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.get(UdpMatchBuilder.class);
-
- if (udpMatchBuilder == null) {
- udpMatchBuilder = new UdpMatchBuilder();
- mapMatchBuilder.put(UdpMatchBuilder.class, udpMatchBuilder);
- }
-
- udpMatchBuilder.setUdpDestinationPort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class);
-
- if (udpMatchBuilder != null) {
- matchBuilderInOut.setLayer4Match(udpMatchBuilder.build());
- }
- }
- },
-
- udp_src {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return UdpSrc.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.get(UdpMatchBuilder.class);
-
- if (udpMatchBuilder == null) {
- udpMatchBuilder = new UdpMatchBuilder();
- mapMatchBuilder.put(UdpMatchBuilder.class, udpMatchBuilder);
- }
-
- udpMatchBuilder.setUdpSourcePort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class);
-
- if (udpMatchBuilder != null) {
- matchBuilderInOut.setLayer4Match(udpMatchBuilder.build());
- }
- }
- },
- tunnel_id {
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.get(TunnelBuilder.class);
-
- if (tunnelBuilder == null) {
- tunnelBuilder = new TunnelBuilder();
- mapMatchBuilder.put(TunnelBuilder.class, tunnelBuilder);
- }
-
- BigInteger[] tunnelIdValues = matchInfo.getBigMatchValues();
- tunnelBuilder.setTunnelId(tunnelIdValues[0]).setTunnelMask(tunnelIdValues[1]).build();
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.remove(TunnelBuilder.class);
-
- if (tunnelBuilder != null) {
- matchBuilderInOut.setTunnel(tunnelBuilder.build());
- }
- }
-
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return TunnelId.class;
- }
-
- },
-
- vlan_vid {
- @Override
- protected Class<? extends MatchField> getMatchType() {
- return VlanVid.class;
- }
-
- @Override
- public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- VlanMatchBuilder vlanMatchBuilder = (VlanMatchBuilder) mapMatchBuilder.get(VlanMatchBuilder.class);
-
- if (vlanMatchBuilder == null) {
- vlanMatchBuilder = new VlanMatchBuilder();
- mapMatchBuilder.put(VlanMatchBuilder.class, vlanMatchBuilder);
- }
-
- vlanMatchBuilder.setVlanId(new VlanIdBuilder()
- .setVlanId(new VlanId(Integer.valueOf((int) matchInfo.getMatchValues()[0])))
- .setVlanIdPresent(((int) matchInfo.getMatchValues()[0] == 0) ? Boolean.FALSE : Boolean.TRUE)
- .build());
- }
-
- @Override
- public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
- VlanMatchBuilder vlanMatchBuilder = (VlanMatchBuilder) mapMatchBuilder.remove(VlanMatchBuilder.class);
-
- if (vlanMatchBuilder != null) {
- matchBuilderInOut.setVlanMatch(vlanMatchBuilder.build());
- }
- }
- };
-
- /*
- public SetFieldMatch buildSetFieldMatch(XtensionType xtype) {
- if (xtype == null || xtype.getMatchMaskType() ==
- SalOfaMatchMaskType.OFPMMNOMASK) {
- return new
- SetFieldMatchBuilder().setHasMask(false).setMatchType(getMatchType())
- .setSalOxmClass(SalOpenflowBasicClass.class).build();
- }
-
- return new SetFieldMatchBuilder()
- .setHasMask(true)
- .setMatchType(getMatchType())
- .setSalOxmClass(SalOpenflowBasicClass.class)
- .addAugmentation(
- ExperimenterSetFieldMatch.class,
- new
- ExperimenterSetFieldMatchBuilder().setMatchMaskType(xtype.getMatchMaskType())
- .setTlvMatchMask(xtype.getByteBuf()).build()).build();
-
-
- }
-*/
-
- // New one for ODL without the Extension --CHECK
- /*
- public SetFieldMatch buildSetFieldMatch() {
-
- return new SetFieldMatchBuilder().setHasMask(false).setMatchType(getMatchType())
- .setSalOxmClass(SalOpenflowBasicClass.class).build();
-
- return null;
- }
-*/
-
-
- public abstract void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder);
-
- public abstract void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo,
- Map<Class<?>, Object> mapMatchBuilder);
-
- protected abstract Class<? extends MatchField> getMatchType();
-
- protected boolean hasMatchFieldMask() {
- // Override this to return true
- return false;
- }
+ eth_src {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return EthSrc.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+ .get(EthernetMatchBuilder.class);
+
+ if (ethernetMatchBuilder == null) {
+ ethernetMatchBuilder = new EthernetMatchBuilder();
+ mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
+ }
+
+ ethernetMatchBuilder.setEthernetSource(new EthernetSourceBuilder().setAddress(
+ new MacAddress(matchInfo.getStringMatchValues()[0])).build());
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+ .remove(EthernetMatchBuilder.class);
+
+ if (ethernetMatchBuilder != null) {
+ matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
+ }
+ }
+ },
+
+ eth_dst {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return EthDst.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+ .get(EthernetMatchBuilder.class);
+
+ if (ethernetMatchBuilder == null) {
+ ethernetMatchBuilder = new EthernetMatchBuilder();
+ mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
+ }
+
+ ethernetMatchBuilder.setEthernetDestination(new EthernetDestinationBuilder().setAddress(
+ new MacAddress(matchInfo.getStringMatchValues()[0])).build());
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+ .remove(EthernetMatchBuilder.class);
+
+ if (ethernetMatchBuilder != null) {
+ matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
+ }
+ }
+ },
+
+ eth_type {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return EthType.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+ .get(EthernetMatchBuilder.class);
+
+ if (ethernetMatchBuilder == null) {
+ ethernetMatchBuilder = new EthernetMatchBuilder();
+ mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
+ }
+
+ ethernetMatchBuilder.setEthernetType(new EthernetTypeBuilder().setType(
+ new EtherType(matchInfo.getMatchValues()[0])).build());
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+ .remove(EthernetMatchBuilder.class);
+
+ if (ethernetMatchBuilder != null) {
+ matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
+ }
+ }
+ },
+
+ in_port {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return InPort.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+
+ StringBuffer nodeConnectorId = new StringBuffer().append("openflow:").append(matchInfo.getMatchValues()[0])
+ .append(':').append(matchInfo.getMatchValues()[1]);
+ matchBuilderInOut.setInPort(new NodeConnectorId(nodeConnectorId.toString()));
+ }
+ },
+
+ ip_proto {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return IpProto.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.get(IpMatchBuilder.class);
+
+ if (ipMatchBuilder == null) {
+ ipMatchBuilder = new IpMatchBuilder();
+ mapMatchBuilder.put(IpMatchBuilder.class, ipMatchBuilder);
+ }
+
+ ipMatchBuilder.setIpProtocol(Short.valueOf((short) matchInfo.getMatchValues()[0])).build();
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.remove(IpMatchBuilder.class);
+
+ if (ipMatchBuilder != null) {
+ matchBuilderInOut.setIpMatch(ipMatchBuilder.build());
+ }
+ }
+ },
+
+ ipv4_dst {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return Ipv4Dst.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
+
+ if (ipv4MatchBuilder == null) {
+ ipv4MatchBuilder = new Ipv4MatchBuilder();
+ mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
+ }
+
+ long[] prefix = matchInfo.getMatchValues();
+ ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1]))).build();
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
+
+ if (ipv4MatchBuilder != null) {
+ matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
+ }
+ }
+ },
+
+ ipv4_src {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return Ipv4Src.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
+
+ if (ipv4MatchBuilder == null) {
+ ipv4MatchBuilder = new Ipv4MatchBuilder();
+ mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
+ }
+
+ long[] prefix = matchInfo.getMatchValues();
+ ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1]))).build();
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
+
+ if (ipv4MatchBuilder != null) {
+ matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
+ }
+ }
+ },
+
+ arp_op {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return ArpOp.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
+
+ if (arpMatchBuilder == null) {
+ arpMatchBuilder = new ArpMatchBuilder();
+ mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
+ }
+
+ arpMatchBuilder.setArpOp(Integer.valueOf((int) matchInfo.getMatchValues()[0]));
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
+
+ if (arpMatchBuilder != null) {
+ matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
+ }
+ }
+ },
+
+ arp_tpa {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return ArpTpa.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
+
+ if (arpMatchBuilder == null) {
+ arpMatchBuilder = new ArpMatchBuilder();
+ mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
+ }
+
+ long[] prefix = matchInfo.getMatchValues();
+ arpMatchBuilder.setArpTargetTransportAddress(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1])));
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
+
+ if (arpMatchBuilder != null) {
+ matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
+ }
+ }
+ },
+
+ arp_spa {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return ArpSpa.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
+
+ if (arpMatchBuilder == null) {
+ arpMatchBuilder = new ArpMatchBuilder();
+ mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
+ }
+
+ long[] prefix = matchInfo.getMatchValues();
+ arpMatchBuilder.setArpSourceTransportAddress(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1])));
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
+
+ if (arpMatchBuilder != null) {
+ matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
+ }
+ }
+ },
+
+ metadata {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return Metadata.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.get(MetadataBuilder.class);
+
+ if (metadataBuilder == null) {
+ metadataBuilder = new MetadataBuilder();
+ mapMatchBuilder.put(MetadataBuilder.class, metadataBuilder);
+ }
+
+ BigInteger[] metadataValues = matchInfo.getBigMatchValues();
+ metadataBuilder.setMetadata(metadataValues[0]).setMetadataMask(metadataValues[1]).build();
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.remove(MetadataBuilder.class);
+
+ if (metadataBuilder != null) {
+ matchBuilderInOut.setMetadata(metadataBuilder.build());
+ }
+ }
+ },
+
+ mpls_label {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return MplsLabel.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
+ .get(ProtocolMatchFieldsBuilder.class);
+
+ if (protocolMatchFieldsBuilder == null) {
+ protocolMatchFieldsBuilder = new ProtocolMatchFieldsBuilder();
+ mapMatchBuilder.put(ProtocolMatchFieldsBuilder.class, protocolMatchFieldsBuilder);
+ }
+
+ protocolMatchFieldsBuilder.setMplsLabel(Long.valueOf(matchInfo.getStringMatchValues()[0])).build();
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
+ .remove(ProtocolMatchFieldsBuilder.class);
+
+ if (protocolMatchFieldsBuilder != null) {
+ matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build());
+ }
+ }
+ },
+
+ pbb_isid {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return PbbIsid.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
+ .get(ProtocolMatchFieldsBuilder.class);
+
+ if (protocolMatchFieldsBuilder == null) {
+ protocolMatchFieldsBuilder = new ProtocolMatchFieldsBuilder();
+ mapMatchBuilder.put(ProtocolMatchFieldsBuilder.class, protocolMatchFieldsBuilder);
+ }
+
+ protocolMatchFieldsBuilder.setPbb(new PbbBuilder().setPbbIsid(Long.valueOf(matchInfo.getMatchValues()[0]))
+ .build());
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
+ .remove(ProtocolMatchFieldsBuilder.class);
+
+ if (protocolMatchFieldsBuilder != null) {
+ matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build());
+ }
+ }
+ },
+
+ tcp_dst {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return TcpDst.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.get(TcpMatchBuilder.class);
+
+ if (tcpMatchBuilder == null) {
+ tcpMatchBuilder = new TcpMatchBuilder();
+ mapMatchBuilder.put(TcpMatchBuilder.class, tcpMatchBuilder);
+ }
+
+ tcpMatchBuilder.setTcpDestinationPort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class);
+
+ if (tcpMatchBuilder != null) {
+ matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build());
+ }
+ }
+ },
+
+ tcp_src {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return TcpSrc.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.get(TcpMatchBuilder.class);
+
+ if (tcpMatchBuilder == null) {
+ tcpMatchBuilder = new TcpMatchBuilder();
+ mapMatchBuilder.put(TcpMatchBuilder.class, tcpMatchBuilder);
+ }
+
+ tcpMatchBuilder.setTcpSourcePort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class);
+
+ if (tcpMatchBuilder != null) {
+ matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build());
+ }
+ }
+ },
+
+ udp_dst {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return UdpDst.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.get(UdpMatchBuilder.class);
+
+ if (udpMatchBuilder == null) {
+ udpMatchBuilder = new UdpMatchBuilder();
+ mapMatchBuilder.put(UdpMatchBuilder.class, udpMatchBuilder);
+ }
+
+ udpMatchBuilder.setUdpDestinationPort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class);
+
+ if (udpMatchBuilder != null) {
+ matchBuilderInOut.setLayer4Match(udpMatchBuilder.build());
+ }
+ }
+ },
+
+ udp_src {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return UdpSrc.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.get(UdpMatchBuilder.class);
+
+ if (udpMatchBuilder == null) {
+ udpMatchBuilder = new UdpMatchBuilder();
+ mapMatchBuilder.put(UdpMatchBuilder.class, udpMatchBuilder);
+ }
+
+ udpMatchBuilder.setUdpSourcePort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class);
+
+ if (udpMatchBuilder != null) {
+ matchBuilderInOut.setLayer4Match(udpMatchBuilder.build());
+ }
+ }
+ },
+ tunnel_id {
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.get(TunnelBuilder.class);
+
+ if (tunnelBuilder == null) {
+ tunnelBuilder = new TunnelBuilder();
+ mapMatchBuilder.put(TunnelBuilder.class, tunnelBuilder);
+ }
+
+ BigInteger[] tunnelIdValues = matchInfo.getBigMatchValues();
+ tunnelBuilder.setTunnelId(tunnelIdValues[0]).setTunnelMask(tunnelIdValues[1]).build();
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.remove(TunnelBuilder.class);
+
+ if (tunnelBuilder != null) {
+ matchBuilderInOut.setTunnel(tunnelBuilder.build());
+ }
+ }
+
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return TunnelId.class;
+ }
+
+ },
+
+ vlan_vid {
+ @Override
+ protected Class<? extends MatchField> getMatchType() {
+ return VlanVid.class;
+ }
+
+ @Override
+ public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ VlanMatchBuilder vlanMatchBuilder = (VlanMatchBuilder) mapMatchBuilder.get(VlanMatchBuilder.class);
+
+ if (vlanMatchBuilder == null) {
+ vlanMatchBuilder = new VlanMatchBuilder();
+ mapMatchBuilder.put(VlanMatchBuilder.class, vlanMatchBuilder);
+ }
+
+ vlanMatchBuilder.setVlanId(new VlanIdBuilder()
+ .setVlanId(new VlanId(Integer.valueOf((int) matchInfo.getMatchValues()[0])))
+ .setVlanIdPresent(((int) matchInfo.getMatchValues()[0] == 0) ? Boolean.FALSE : Boolean.TRUE)
+ .build());
+ }
+
+ @Override
+ public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+ VlanMatchBuilder vlanMatchBuilder = (VlanMatchBuilder) mapMatchBuilder.remove(VlanMatchBuilder.class);
+
+ if (vlanMatchBuilder != null) {
+ matchBuilderInOut.setVlanMatch(vlanMatchBuilder.build());
+ }
+ }
+ };
+
+
+ public abstract void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder);
+
+ public abstract void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo,
+ Map<Class<?>, Object> mapMatchBuilder);
+
+ protected abstract Class<? extends MatchField> getMatchType();
+
+ protected boolean hasMatchFieldMask() {
+ // Override this to return true
+ return false;
+ }
}
*/
package org.opendaylight.vpnservice.mdsalutil;
-import java.math.BigInteger;
public class MetaDataConstants {
- // Base cookie value
- public static final BigInteger COOKIE_SCF_BASE = new BigInteger("7000000", 16);
+ // Nothing
}
import java.math.BigInteger;
public class MetaDataUtil {
-
- public static final BigInteger METADATA_NO_MASK = new BigInteger("0000000000000000", 16);
- public static final BigInteger METADATA_MASK_SCF_MATCH = new BigInteger("FF00000000000000", 16);
- public static final BigInteger METADATA_MASK_SUBP_MATCH = new BigInteger("00000000FFFF0000", 16);
- public static final BigInteger METADATA_MASK_APPP_MATCH = new BigInteger("000000000000FFFF", 16);
- public static final BigInteger METADATA_MASK_LPORT_MATCH = new BigInteger("00FFFF0000000000", 16);
- public static final BigInteger METADATA_MASK_SCID_MATCH = new BigInteger("000000000000FFFF", 16);
- public static final BigInteger METADATA_MASK_SCID_WRITE = new BigInteger("000000000000FFFF", 16);
- public static final BigInteger METADATA_MASK_SUBP_WRITE = new BigInteger("00000000FFFF0000", 16);
- public static final BigInteger METADATA_MASK_APPP_WRITE = new BigInteger("000000000000FFFF", 16);
- public static final BigInteger MASK_DMAC_WRITE = new BigInteger("0000FFFFFFFFFFFF", 16);
- public static final BigInteger METADATA_MASK_SCF_WRITE = new BigInteger("FF00000000000000", 16);
- public static final BigInteger METADATA_MASK_LPORT_WRITE = new BigInteger("00FFFF0000000000", 16);
- public static final BigInteger METADATA_MASK_LPORT_TAG = new BigInteger("1FFFFF0000000000", 16);
- public static final BigInteger METADATA_MASK_SERVICE_INDEX = new BigInteger("E000000000000000", 16);
- public static final BigInteger METADATA_MASK_SERVICE = new BigInteger("000000FFFF000000", 16);
- public static final BigInteger METADA_MASK_TUNNEL_ID_VNI = new BigInteger("00000000FFFFFF00", 16);
- public static final BigInteger METADATA_MASK_LABEL_ITM = new BigInteger("40FFFFFF000000FF", 16);
- public static final BigInteger METADA_MASK_VALID_TUNNEL_ID_BIT_AND_TUNNEL_ID = new BigInteger("08000000FFFFFF00", 16);
- public static final BigInteger METADATA_MASK_LABEL_L3 = new BigInteger("000000FFFF000000", 16);
public static final BigInteger METADATA_MASK_VRFID = new BigInteger("00000000FFFFFFFF", 16);
-
- public static BigInteger getMetadataSCF(int scfTag) {
- return (new BigInteger("FF", 16).and(BigInteger.valueOf(scfTag))).shiftLeft(56);
- }
-
- public static BigInteger getMetadataSCID(int scId) {
- return BigInteger.valueOf(scId).and(new BigInteger("FFFF", 16));
- }
-
- public static BigInteger getMetadataSubProfID(int subProfId) {
- return (BigInteger.valueOf(subProfId).and(new BigInteger("FFFF", 16))).shiftLeft(16);
- }
-
- public static BigInteger getMetadataAppProfID(int appProfId) {
- return BigInteger.valueOf(appProfId).and(new BigInteger("FFFF", 16));
- }
-
- public static BigInteger getMetadataAPPP(int appProfId) {
- return BigInteger.valueOf(appProfId).and(new BigInteger("FFFF", 16));
- }
-
- public static BigInteger getCookieSCFEthTypeFilter(int scfTag) {
- return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0120000", 16)).add(BigInteger.valueOf(scfTag));
- }
-
- public static BigInteger getCookieSubFilter(int scfTag) {
- return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0310000", 16)).add(BigInteger.valueOf(scfTag));
- }
-
- public static BigInteger getCookieProfMap(int scfTag) {
- return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0510000", 16)).add(BigInteger.valueOf(scfTag));
- }
-
- public static BigInteger getCookieSCFAppFilter(int scfTag) {
- return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0410000", 16)).add(BigInteger.valueOf(scfTag));
- }
-
- public static BigInteger getEthDestForIpNextHop(int groupId) {
- return BigInteger.valueOf(groupId).and(MASK_DMAC_WRITE);
- }
- public static long getIpAddress(byte[] rawIpAddress) {
- return (((rawIpAddress[0] & 0xFF) << (3 * 8)) + ((rawIpAddress[1] & 0xFF) << (2 * 8))
- + ((rawIpAddress[2] & 0xFF) << (1 * 8)) + (rawIpAddress[3] & 0xFF)) & 0xffffffffL;
- }
-
- public static BigInteger getMetadataLPort(int lPortTag) {
- return (new BigInteger("FFFF", 16).and(BigInteger.valueOf(lPortTag))).shiftLeft(40);
- }
-
- public static BigInteger getMetadataScHop(int scfInstanceTag, int scfPortTag, int serviceChainId) {
- return getMetadataSCF(scfInstanceTag).or(getMetadataLPort(scfPortTag)).or(getMetadataSCID(serviceChainId));
- }
-
- public static BigInteger getMetadataMaskScHop() {
- return METADATA_MASK_SCF_WRITE.or(METADATA_MASK_LPORT_WRITE).or(METADATA_MASK_SCID_WRITE);
- }
-
- public static BigInteger getCookieSCHop(int scfInstanceTag) {
- return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0610000", 16)).add(BigInteger.valueOf(scfInstanceTag));
- }
-
- public static BigInteger getMetadataScfPort(int scfInstanceTag, int scfPortTag) {
- return getMetadataSCF(scfInstanceTag).or(getMetadataLPort(scfPortTag));
- }
-
- public static BigInteger getMetadataMaskScfPort() {
- return METADATA_MASK_LPORT_WRITE.or(METADATA_MASK_SCF_WRITE);
- }
-
- public static BigInteger getCookieSCFPort() {
- return new BigInteger("5000000", 16);
- }
-
- public static BigInteger getCookieSCFIpv4EthTypeFilter(int scfInstanceTag) {
- return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0100000", 16)).add(BigInteger.valueOf(scfInstanceTag));
- }
-
- public static BigInteger getCookieSCFArpEthTypeFilter(int scfInstanceTag) {
- return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0110000", 16)).add(BigInteger.valueOf(scfInstanceTag));
- }
-
- public static BigInteger getLportTagMetaData(int lportTag) {
- return new BigInteger("1FFFFF", 16).and(BigInteger.valueOf(lportTag)).shiftLeft(40);
- }
-
- public static BigInteger getLportFromMetadata(BigInteger metadata) {
- return (metadata.and(METADATA_MASK_LPORT_TAG)).shiftRight(40);
- }
-
- public static BigInteger getServiceIndexMetaData(int serviceIndex) {
- return new BigInteger("7", 16).and(BigInteger.valueOf(serviceIndex)).shiftLeft(61);
- }
-
- public static BigInteger getMetaDataForLPortDispatcher(int lportTag, short serviceIndex) {
- return getServiceIndexMetaData(serviceIndex).or(getLportTagMetaData(lportTag));
- }
-
- public static BigInteger getMetaDataMaskForLPortDispatcher() {
- return METADATA_MASK_SERVICE_INDEX.or(METADATA_MASK_LPORT_TAG);
- }
-
- public static BigInteger getWriteMetaDataMaskForServicePorts() {
- return METADATA_MASK_SERVICE_INDEX.or(METADATA_MASK_LPORT_TAG).or(METADATA_MASK_SERVICE);
- }
-
- public static BigInteger getMetaDataMaskForLPortDispatcher(BigInteger metadataMaskForServiceIndex,
- BigInteger metadataMaskForLPortTag, BigInteger metadataMaskForService) {
- return metadataMaskForServiceIndex.or(metadataMaskForLPortTag).or(metadataMaskForService);
- }
-
- public static BigInteger getMetaDataForLPortDispatcher(int lportTag, short serviceIndex,
- BigInteger serviceMetaData) {
- return getServiceIndexMetaData(serviceIndex).or(getLportTagMetaData(lportTag)).or(serviceMetaData);
- }
-
-
- public static BigInteger getVmLportTagMetaData(int vrfId) {
- return BigInteger.valueOf(vrfId);
- }
-
- public static BigInteger getTunnelIdWithVni(int vni) {
- return BigInteger.valueOf(vni).shiftLeft(8);
- }
-
- /**
- * For the tunnel id with VNI and valid-vni-flag set, the most significant byte
- * should have 08. So, shifting 08 to 7 bytes (56 bits) and the result is OR-ed with
- * VNI being shifted to 1 byte.
- */
- public static BigInteger getTunnelIdWithValidVniBitAndVniSet(int vni) {
- return BigInteger.valueOf(0X08).shiftLeft(56).or(BigInteger.valueOf(vni).shiftLeft(8));
- }
}
//Default Port
public static final int UDP_DEFAULT_PORT = 4789;
- // Table IDs
- public static final short PRECHECK_TABLE = 0;
- public static final short PORT_VLAN_TABLE = 0;
-
- // Table Max Entries
- public static final long INGRESS_TABLE_MAX_ENTRY = 1000;
- public static final long PRECHECK_TABLE_MAX_ENTRY = 100;
-
+
// Flow Actions
public static final int ADD_FLOW = 0;
public static final int DEL_FLOW = 1;
public static final int TABLE_MISS_FLOW = 0;
public static final int TABLE_MISS_PRIORITY = 0;
- // Misc FIXME: Find new place for this
- public static final String DPN_STATE_CACHE = "dpn.state.cache";
- public static final String DPN_SYNCSTATUS_CACHE = "dpn.resync.status.cache";
- public static final String STATISTICS_LOCK_PREFIX ="scf.statistics.lock";
- public static final String STATISTICS_LOCK_SEPARATOR =".";
- public static final int STATISTICS_LOCK_RETRY_COUNT =1800;
-}
\ No newline at end of file
+ }
\ No newline at end of file
package org.opendaylight.vpnservice.mdsalutil.interfaces;
-//import java.math.BigInteger;
import java.util.List;
-
import org.opendaylight.vpnservice.mdsalutil.ActionInfo;
-//import org.opendaylight.vpnservice.mdsalutil.BucketInfo;
-//import org.opendaylight.vpnservice.mdsalutil.DpnState;
import org.opendaylight.vpnservice.mdsalutil.FlowEntity;
import org.opendaylight.vpnservice.mdsalutil.GroupEntity;
-//import org.opendaylight.vpnservice.mdsalutil.InstructionInfo;
-//import org.opendaylight.vpnservice.mdsalutil.MatchInfo;
-//import org.opendaylight.vpnservice.mdsalutil.SyncStatus;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
public interface IMdsalApiManager {
<artifactId>model-flow-service</artifactId>
<version>0.1.0-SNAPSHOT</version>
</dependency>
- <!--<dependency>
- <groupId>org.opendaylight.controller.model</groupId>
- <artifactId>model-flow-management</artifactId>
- </dependency>-->
- <!-- Commenting due to missing constraint error
- <dependency>
- <groupId>org.opendaylight.controller.model</groupId>
- <artifactId>model-inventory</artifactId>
- </dependency>
- -->
- <!--<dependency>
- <groupId>org.eclipse.xtend</groupId>
- <artifactId>org.eclipse.xtend.lib</artifactId>
- <version>${xtend.version}</version>
- </dependency>-->
- <!--<dependency>
- <groupId>equinoxSDK381</groupId>
- <artifactId>org.eclipse.osgi</artifactId>
- </dependency>-->
- <dependency>
+ <!-- TEST Dependencies -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-module-junit4</artifactId>
+ <version>1.5.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-api-mockito</artifactId>
+ <version>1.5.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>sal-binding-broker-impl</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>sal-binding-broker-impl</artifactId>
+ <version>${mdsal.version}</version>
+ <scope>test</scope>
+ <type>test-jar</type>
+ </dependency>
+ <dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
- <dependency>
+ <dependency>
<groupId>${project.groupId}</groupId>
<artifactId>mdsalutil-api</artifactId>
<version>${project.version}</version>
<manifestLocation>${project.basedir}/META-INF</manifestLocation>
</configuration>
</plugin>
- <!--<plugin>
- <groupId>org.eclipse.xtend</groupId>
- <artifactId>xtend-maven-plugin</artifactId>
- <version>${xtend.version}</version>
- <executions>
- <execution>
- <goals>
- <goal>compile</goal>
- </goals>
- <configuration>
- <outputDirectory>${basedir}/src/main/xtend-gen</outputDirectory>
- </configuration>
- </execution>
- </executions>
- </plugin>-->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>${maven.clean.plugin.version}</version>
</filesets>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <argLine>-XX:-UseSplitVerifier</argLine>
+ </configuration>
+ </plugin>
+
</plugins>
</build>
</project>
import java.math.BigInteger;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
-import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
-//import org.opendaylight.controller.md.sal.common.api.data.DataModification;
import org.opendaylight.vpnservice.mdsalutil.ActionInfo;
import org.opendaylight.vpnservice.mdsalutil.ActionType;
-import org.opendaylight.vpnservice.mdsalutil.BucketInfo;
import org.opendaylight.vpnservice.mdsalutil.FlowEntity;
import org.opendaylight.vpnservice.mdsalutil.GroupEntity;
-import org.opendaylight.vpnservice.mdsalutil.InstructionInfo;
import org.opendaylight.vpnservice.mdsalutil.MDSALUtil;
-import org.opendaylight.vpnservice.mdsalutil.MatchInfo;
-import org.opendaylight.vpnservice.mdsalutil.MatchFieldType;
-import org.opendaylight.vpnservice.mdsalutil.MetaDataUtil;
-import org.opendaylight.vpnservice.mdsalutil.InstructionType;
import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext;
-import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer;
-import org.opendaylight.controller.sal.binding.api.data.DataBrokerService;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowTableRef;
-// Missing constraint
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.OpendaylightInventoryService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
-import org.opendaylight.yangtools.yang.common.RpcResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.OptimisticLockFailedException;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import com.google.common.util.concurrent.CheckedFuture;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-public class MDSALManager implements IMdsalApiManager,BindingAwareConsumer, AutoCloseable {
+public class MDSALManager implements AutoCloseable {
private static final Logger s_logger = LoggerFactory.getLogger(MDSALManager.class);
private DataBroker m_dataBroker;
- private ConsumerContext m_consumerContext = null;
-
private PacketProcessingService m_packetProcessingService;
-
+
private final AtomicInteger m_atomicInteger = new AtomicInteger();
//TODO : IF ID MANAGER IS RQD
-
- @Override
- public void onSessionInitialized(ConsumerContext session) {
-
- s_logger.info( " Session Initiated for MD SAL Manager") ;
-
- m_consumerContext = session;
-
- m_dataBroker = session.getSALService(DataBroker.class);
-
- // TODO - Verify this.
- m_packetProcessingService = session.getRpcService(PacketProcessingService.class);
-
+
+ /**
+ * Writes the flows and Groups to the MD SAL DataStore
+ * which will be sent to the openflowplugin for installing flows/groups on the switch.
+ * Other modules of VPN service that wants to install flows / groups on the switch
+ * uses this utility
+ *
+ * @param db - dataBroker reference
+ * @param pktProcService- PacketProcessingService for sending the packet outs
+ */
+ public MDSALManager(final DataBroker db, PacketProcessingService pktProcService) {
+ m_dataBroker = db;
+ m_packetProcessingService = pktProcService;
+
}
-
-
+
+
@Override
public void close() throws Exception {
- s_logger.info("MDSAL Manager Closed");
+ s_logger.info("MDSAL Manager Closed");
}
-
- @Override
+
+
public void printTest() {
-
- s_logger.info(" INTER MODULECOMMUNICATION IS WORKING!!!!");
+
+ s_logger.info(" INTER MODULECOMMUNICATION IS WORKING!!!!");
}
- @Override
+
public void installFlow(FlowEntity flowEntity) {
+
try {
- s_logger.info("within installFlowX {}", flowEntity.getDpnId());
- System.out.println( " Insie installFlow -- ") ;
+ s_logger.info("within installFlow {}", flowEntity.getDpnId());
if (flowEntity.getCookie() == null) {
- s_logger.info("Helium_sync: Cookie is null");
+ // s_logger.info("Helium_sync: Cookie is null");
flowEntity.setCookie(new BigInteger("0110000", 16));
}
- Flow flow = flowEntity.getFlowBuilder().build();
+ FlowKey flowKey = new FlowKey( new FlowId(flowEntity.getFlowId()) );
+
+ FlowBuilder flowbld = flowEntity.getFlowBuilder();
+
+ Flow flow = flowbld.build() ;
Node nodeDpn = buildDpnNode(flowEntity.getDpnId());
InstanceIdentifier<Node> nodeInstanceId = InstanceIdentifier.builder(Nodes.class)
.child(Node.class, nodeDpn.getKey()).build();
+
InstanceIdentifier<Flow> flowInstanceId = InstanceIdentifier.builder(Nodes.class)
.child(Node.class, nodeDpn.getKey()).augmentation(FlowCapableNode.class)
- .child(Table.class, new TableKey(flow.getTableId())).child(Flow.class, flow.getKey()).build();
+ .child(Table.class, new TableKey(flowEntity.getTableId())).child(Flow.class,flowKey).build();
String sTransactionUri = generateTransactionUri();
- // Helium Way
-
+
+ TableKey tableKey = new TableKey(flowEntity.getTableId() );
+ InstanceIdentifier<Table> tableInstanceId = InstanceIdentifier.create(Nodes.class).child(Node.class, nodeDpn.getKey())
+ .augmentation(FlowCapableNode.class).child(Table.class, tableKey);
+ Table table = new TableBuilder().setKey(tableKey).setFlow(Collections.<Flow>emptyList()).build();
+
WriteTransaction modification = m_dataBroker.newWriteOnlyTransaction();
-
- modification.put(LogicalDatastoreType.CONFIGURATION, nodeInstanceId, nodeDpn, true);
-
- modification.put(LogicalDatastoreType.CONFIGURATION, flowInstanceId, flow);
-
- ListenableFuture<RpcResult<TransactionStatus>> commitFuture = modification.commit();
-
- Futures.addCallback(commitFuture, new FutureCallback<RpcResult<TransactionStatus>>() {
+
+ //CHECK IF RQD
+ // modification.put(LogicalDatastoreType.CONFIGURATION, nodeInstanceId, nodeDpn, true);
+
+
+ modification.put(LogicalDatastoreType.CONFIGURATION, tableInstanceId, table);
+
+ modification.put(LogicalDatastoreType.CONFIGURATION, flowInstanceId, flowbld.build());
+
+ CheckedFuture<Void,TransactionCommitFailedException> submitFuture = modification.submit();
+
+ Futures.addCallback(submitFuture, new FutureCallback<Void>() {
+
@Override
- public void onSuccess(RpcResult<TransactionStatus> result) {
- if( result.getResult() != TransactionStatus.COMMITED ) {
- s_logger.debug("Failed to commit the Flow Data " + result.getErrors());
-
- }
-
+ public void onSuccess(final Void result) {
+ // Commited successfully
+ s_logger.info( "Install Flow -- Committedsuccessfully ") ;
}
@Override
- public void onFailure(Throwable throwable) {
- s_logger.error(throwable.getMessage(), throwable);
- s_logger.debug(String.format("Status of Flow Data Loaded Transaction : failure. Reason : %s", throwable));
-
+ public void onFailure(final Throwable t) {
+ // Transaction failed
+
+ if(t instanceof OptimisticLockFailedException) {
+ // Failed because of concurrent transaction modifying same data
+ s_logger.error( "Install Flow -- Failed because of concurrent transaction modifying same data ") ;
+ } else {
+ // Some other type of TransactionCommitFailedException
+ s_logger.error( "Install Flow -- Some other type of TransactionCommitFailedException " + t) ;
+ }
}
});
} catch (Exception e) {
s_logger.error("Could not install flow: {}, exception: {}", flowEntity, e.getMessage());
}
-
}
- @Override
+
public void installGroup(GroupEntity groupEntity) {
try {
Group group = groupEntity.getGroupBuilder().build();
.child(Node.class, nodeDpn.getKey()).augmentation(FlowCapableNode.class)
.child(Group.class, new GroupKey(new GroupId(groupEntity.getGroupId()))).build();
-
- // Helium
WriteTransaction modification = m_dataBroker.newWriteOnlyTransaction();
-
- modification.put(LogicalDatastoreType.CONFIGURATION, nodeInstanceId, nodeDpn);
+
+ //CHECK IF RQD
+ // modification.put(LogicalDatastoreType.CONFIGURATION, nodeInstanceId, nodeDpn);
modification.put(LogicalDatastoreType.CONFIGURATION, groupInstanceId, group);
-
- ListenableFuture<RpcResult<TransactionStatus>> commitFuture = modification.commit();
-
- Futures.addCallback(commitFuture, new FutureCallback<RpcResult<TransactionStatus>>() {
+
+ CheckedFuture<Void,TransactionCommitFailedException> submitFuture = modification.submit();
+
+ Futures.addCallback(submitFuture, new FutureCallback<Void>() {
@Override
- public void onSuccess(RpcResult<TransactionStatus> result) {
- if( result.getResult() != TransactionStatus.COMMITED ) {
- s_logger.debug("Failed to commit the group Data " + result.getErrors());
-
- }
-
+ public void onSuccess(final Void result) {
+ // Commited successfully
+ s_logger.info( "Install Group -- Committedsuccessfully ") ;
}
@Override
- public void onFailure(Throwable throwable) {
- s_logger.error(throwable.getMessage(), throwable);
- s_logger.debug(String.format("Status of Group Data Loaded Transaction : failure. Reason : %s", throwable));
-
+ public void onFailure(final Throwable t) {
+ // Transaction failed
+
+ if(t instanceof OptimisticLockFailedException) {
+ // Failed because of concurrent transaction modifying same data
+ s_logger.error( "Install Group -- Failed because of concurrent transaction modifying same data ") ;
+ } else {
+ // Some other type of TransactionCommitFailedException
+ s_logger.error( "Install Group -- Some other type of TransactionCommitFailedException " + t) ;
+ }
}
- });
-
- } catch (Exception e) {
+ });
+ } catch (Exception e) {
s_logger.error("Could not install Group: {}, exception: {}", groupEntity, e.getMessage());
throw e;
}
}
- @Override
public void removeFlow(FlowEntity flowEntity) {
try {
Node nodeDpn = buildDpnNode(flowEntity.getDpnId());
WriteTransaction modification = m_dataBroker.newWriteOnlyTransaction();
modification.delete(LogicalDatastoreType.CONFIGURATION,flowInstanceId );
- ListenableFuture<RpcResult<TransactionStatus>> commitFuture = modification.commit();
-
- Futures.addCallback(commitFuture, new FutureCallback<RpcResult<TransactionStatus>>() {
+ CheckedFuture<Void,TransactionCommitFailedException> submitFuture = modification.submit();
+
+ Futures.addCallback(submitFuture, new FutureCallback<Void>() {
@Override
- public void onSuccess(RpcResult<TransactionStatus> result) {
- if( result.getResult() != TransactionStatus.COMMITED ) {
- s_logger.debug("Failed to remove the Flow Data " + result.getErrors());
-
- }
-
+ public void onSuccess(final Void result) {
+ // Commited successfully
+ s_logger.info( "Delete Flow -- Committedsuccessfully ") ;
}
@Override
- public void onFailure(Throwable throwable) {
- s_logger.error(throwable.getMessage(), throwable);
- s_logger.debug(String.format("Status of Flow Data remove Transaction : failure. Reason : %s", throwable));
-
+ public void onFailure(final Throwable t) {
+ // Transaction failed
+ if(t instanceof OptimisticLockFailedException) {
+ // Failed because of concurrent transaction modifying same data
+ s_logger.error( "Delete Flow -- Failed because of concurrent transaction modifying same data ") ;
+ } else {
+ // Some other type of TransactionCommitFailedException
+ s_logger.error( "Delete Flow -- Some other type of TransactionCommitFailedException " + t) ;
+ }
}
+
});
} catch (Exception e) {
s_logger.error("Could not remove Flow: {}, exception: {}", flowEntity, e.getMessage());
}
}
- @Override
public void removeGroup(GroupEntity groupEntity) {
try {
Node nodeDpn = buildDpnNode(groupEntity.getDpnId());
.child(Node.class, nodeDpn.getKey()).augmentation(FlowCapableNode.class)
.child(Group.class, new GroupKey(new GroupId(groupEntity.getGroupId()))).build();
-
WriteTransaction modification = m_dataBroker.newWriteOnlyTransaction();
-
+
modification.delete(LogicalDatastoreType.CONFIGURATION,groupInstanceId );
- ListenableFuture<RpcResult<TransactionStatus>> commitFuture = modification.commit();
-
- Futures.addCallback(commitFuture, new FutureCallback<RpcResult<TransactionStatus>>() {
+ CheckedFuture<Void,TransactionCommitFailedException> submitFuture = modification.submit();
+
+ Futures.addCallback(submitFuture, new FutureCallback<Void>() {
@Override
- public void onSuccess(RpcResult<TransactionStatus> result) {
- if( result.getResult() != TransactionStatus.COMMITED ) {
- s_logger.debug("Failed to remove the group Data " + result.getErrors());
-
- }
-
+ public void onSuccess(final Void result) {
+ // Commited successfully
+ s_logger.info( "Install Group -- Committedsuccessfully ") ;
}
@Override
- public void onFailure(Throwable throwable) {
- s_logger.error(throwable.getMessage(), throwable);
- s_logger.debug(String.format("Status of group Data remove Transaction : failure. Reason : %s", throwable));
-
+ public void onFailure(final Throwable t) {
+ // Transaction failed
+ if(t instanceof OptimisticLockFailedException) {
+ // Failed because of concurrent transaction modifying same data
+ s_logger.error( "Install Group -- Failed because of concurrent transaction modifying same data ") ;
+ } else {
+ // Some other type of TransactionCommitFailedException
+ s_logger.error( "Install Group -- Some other type of TransactionCommitFailedException " + t) ;
+ }
}
});
-
-
-
} catch (Exception e) {
s_logger.error("Could not remove Group: {}, exception: {}", groupEntity, e.getMessage());
}
}
- @Override
public void modifyGroup(GroupEntity groupEntity) {
installGroup(groupEntity);
+ Long.toString(nTransactionId);
}
*/
-
- @Override
+
public void sendPacketOut(long lDpnId, int groupId, byte[] payload) {
List<ActionInfo> actionInfos = new ArrayList<ActionInfo>();
sendPacketOutWithActions(lDpnId, groupId, payload, actionInfos);
}
- @Override
public void sendPacketOutWithActions(long lDpnId, long groupId, byte[] payload, List<ActionInfo> actionInfos) {
m_packetProcessingService.transmitPacket(MDSALUtil.getPacketOut(actionInfos, payload, lDpnId,
getNodeConnRef("openflow:" + lDpnId, "0xfffffffd")));
}
- @Override
public void sendARPPacketOutWithActions(long lDpnId, byte[] payload, List<ActionInfo> actions) {
-
m_packetProcessingService.transmitPacket(MDSALUtil.getPacketOut(actions, payload, lDpnId,
getNodeConnRef("openflow:" + lDpnId, "0xfffffffd")));
}
return nodeDpn;
}
+
}
--- /dev/null
+package org.opendaylight.vpnservice.mdsalutil.internal;
+
+import java.util.List;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext;
+import org.opendaylight.vpnservice.mdsalutil.ActionInfo;
+import org.opendaylight.vpnservice.mdsalutil.FlowEntity;
+import org.opendaylight.vpnservice.mdsalutil.GroupEntity;
+import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MDSALUtilProvider implements BindingAwareConsumer, IMdsalApiManager, AutoCloseable {
+
+ private static final Logger s_logger = LoggerFactory.getLogger(MDSALUtilProvider.class);
+ private MDSALManager mdSalMgr;
+
+ @Override
+ public void onSessionInitialized(ConsumerContext session) {
+
+ s_logger.info( " Session Initiated for MD SAL Util Provider") ;
+
+ try {
+ final DataBroker dataBroker;
+ final PacketProcessingService packetProcessingService;
+ dataBroker = session.getSALService(DataBroker.class);
+ // TODO - Verify this.
+ packetProcessingService = session.getRpcService(PacketProcessingService.class);
+ mdSalMgr = new MDSALManager( dataBroker, packetProcessingService) ;
+ }catch( Exception e) {
+ s_logger.error( "Error initializing MD SAL Util Services " + e );
+ }
+ }
+
+
+ @Override
+ public void close() throws Exception {
+ mdSalMgr.close();
+ s_logger.info("MDSAL Manager Closed");
+ }
+
+
+ @Override
+ public void installFlow(FlowEntity flowEntity) {
+ mdSalMgr.installFlow(flowEntity);
+ }
+
+ @Override
+ public void removeFlow(FlowEntity flowEntity) {
+ mdSalMgr.removeFlow(flowEntity);
+ }
+
+ @Override
+ public void installGroup(GroupEntity groupEntity) {
+ mdSalMgr.installGroup(groupEntity);
+ }
+
+
+ @Override
+ public void modifyGroup(GroupEntity groupEntity) {
+ mdSalMgr.modifyGroup(groupEntity);
+ }
+
+
+ @Override
+ public void removeGroup(GroupEntity groupEntity) {
+ mdSalMgr.removeGroup(groupEntity);
+ }
+
+
+ @Override
+ public void sendPacketOut(long lDpnId, int groupId, byte[] payload) {
+ mdSalMgr.sendPacketOut(lDpnId, groupId, payload);
+ }
+
+
+ @Override
+ public void sendPacketOutWithActions(long lDpnId, long groupId,
+ byte[] payload, List<ActionInfo> actionInfos) {
+ mdSalMgr.sendPacketOutWithActions(lDpnId, groupId, payload, actionInfos);
+ }
+
+
+ @Override
+ public void sendARPPacketOutWithActions(long dpid, byte[] payload,
+ List<ActionInfo> action_info) {
+ mdSalMgr.sendARPPacketOutWithActions(dpid, payload, action_info);
+ }
+
+
+ @Override
+ public void printTest() {
+ // TODO Auto-generated method stub
+ mdSalMgr.printTest();
+ }
+
+}
package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsalutil.impl.rev150403;
-import org.opendaylight.vpnservice.mdsalutil.internal.MDSALManager;
+import org.opendaylight.vpnservice.mdsalutil.internal.MDSALUtilProvider;
public class MdsaluttilimplModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsalutil.impl.rev150403.AbstractMdsaluttilimplModule {
public MdsaluttilimplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
// TODO:implement
// Can use the following to get a handle to data broker
- MDSALManager mdsalUtilMgr = new MDSALManager();
- getBrokerDependency().registerConsumer(mdsalUtilMgr);
+ MDSALUtilProvider mdsalUtilProvider = new MDSALUtilProvider();
+ getBrokerDependency().registerConsumer(mdsalUtilProvider);
//DataBroker dataBrokerService = getDataBrokerDependency();
//mdsalUtilMgr.setDataProvider(dataBrokerService);
- return mdsalUtilMgr ;
+ return mdsalUtilProvider ;
}
}
--- /dev/null
+package org.opendaylight.vpnservice.test;
+
+import java.util.Collection;
+
+import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import com.google.common.base.Preconditions;
+
+public abstract class AbstractMockForwardingRulesManager<D extends DataObject> implements DataTreeChangeListener<D> {
+
+ public AbstractMockForwardingRulesManager() {
+ // Do Nothing
+ }
+
+
+ public void onDataTreeChanged(Collection<DataTreeModification<D>> changes) {
+ // TODO Auto-generated method stub
+ }
+
+}
--- /dev/null
+package org.opendaylight.vpnservice.test;
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Collections;
+import java.util.concurrent.ExecutionException;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+
+import org.mockito.runners.MockitoJUnitRunner;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.vpnservice.mdsalutil.ActionInfo;
+import org.opendaylight.vpnservice.mdsalutil.ActionType;
+import org.opendaylight.vpnservice.mdsalutil.FlowEntity;
+import org.opendaylight.vpnservice.mdsalutil.GroupEntity;
+import org.opendaylight.vpnservice.mdsalutil.BucketInfo;
+import org.opendaylight.vpnservice.mdsalutil.InstructionInfo;
+import org.opendaylight.vpnservice.mdsalutil.InstructionType;
+import org.opendaylight.vpnservice.mdsalutil.MDSALUtil;
+import org.opendaylight.vpnservice.mdsalutil.MatchFieldType;
+import org.opendaylight.vpnservice.mdsalutil.MatchInfo;
+import org.opendaylight.vpnservice.mdsalutil.internal.MDSALManager;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import static org.junit.Assert.assertEquals;
+
+@RunWith(MockitoJUnitRunner.class)
+//@RunWith(PowerMockRunner.class)
+@PrepareForTest(MDSALUtil.class)
+public class MdSalUtilTest extends AbstractDataBrokerTest {
+ DataBroker dataBroker;
+ @Mock PacketProcessingService ppS ;
+ MDSALManager mdSalMgr = null ;
+ MockFlowForwarder flowFwder = null ;
+ MockGroupForwarder grpFwder = null ;
+
+ @Before
+ public void setUp() throws Exception {
+ dataBroker = getDataBroker() ;
+ mdSalMgr = new MDSALManager( dataBroker, ppS);
+ flowFwder = new MockFlowForwarder( dataBroker );
+ grpFwder = new MockGroupForwarder( dataBroker ) ;
+
+ PowerMockito.mockStatic(MDSALUtil.class) ;
+
+ NodeKey s1Key = new NodeKey(new NodeId("openflow:1"));
+ addFlowCapableNode(s1Key);
+ }
+
+ @Test
+ public void testInstallFlow() {
+ String dpnId = "openflow:1";
+ String tableId1 = "12";
+
+ //Install Flow 1
+ FlowEntity testFlow1 = createFlowEntity(dpnId, tableId1) ;
+ mdSalMgr.installFlow(testFlow1);
+ assertEquals(1, flowFwder.getDataChgCount());
+
+ // Install FLow 2
+ String tableId2 = "13" ;
+ FlowEntity testFlow2 = createFlowEntity(dpnId, tableId2) ;
+ mdSalMgr.installFlow(testFlow2);
+ assertEquals(2, flowFwder.getDataChgCount());
+ }
+
+ @Test
+ public void testRemoveFlow() {
+ String dpnId = "openflow:1";
+ String tableId = "13" ;
+ FlowEntity testFlow = createFlowEntity(dpnId, tableId) ;
+
+ // To test RemoveFlow add and then delete Flows
+ mdSalMgr.installFlow(testFlow) ;
+ assertEquals(1, flowFwder.getDataChgCount());
+ mdSalMgr.removeFlow(testFlow);
+ assertEquals(0, flowFwder.getDataChgCount());
+ }
+
+ @Test
+ public void testInstallGroup() {
+ // Install Group 1
+ String Nodeid = "1";
+ String inport = "2" ;
+ int vlanid = 100 ;
+ GroupEntity grpEntity1 = createGroupEntity(Nodeid, inport, vlanid) ;
+
+ mdSalMgr.installGroup(grpEntity1);
+ assertEquals(1, grpFwder.getDataChgCount());
+
+ // Install Group 2
+ Nodeid = "1";
+ inport = "3" ;
+ vlanid = 100 ;
+ GroupEntity grpEntity2 = createGroupEntity(Nodeid, inport, vlanid) ;
+ mdSalMgr.installGroup(grpEntity2);
+ assertEquals(2, grpFwder.getDataChgCount());
+ }
+
+ @Test
+ public void testRemoveGroup() {
+ String Nodeid = "1";
+ String inport = "2" ;
+ int vlanid = 100 ;
+ GroupEntity grpEntity = createGroupEntity(Nodeid, inport, vlanid) ;
+ // To test RemoveGroup add and then delete Group
+ mdSalMgr.installGroup(grpEntity);
+ assertEquals(1, grpFwder.getDataChgCount());
+ mdSalMgr.removeGroup(grpEntity);
+ assertEquals(0, grpFwder.getDataChgCount());
+ }
+
+ public void addFlowCapableNode(NodeKey nodeKey) throws ExecutionException, InterruptedException {
+ Nodes nodes = new NodesBuilder().setNode(Collections.<Node>emptyList()).build();
+ InstanceIdentifier<Node> flowNodeIdentifier = InstanceIdentifier.create(Nodes.class)
+ .child(Node.class, nodeKey);
+
+ FlowCapableNodeBuilder fcnBuilder = new FlowCapableNodeBuilder();
+ NodeBuilder nodeBuilder = new NodeBuilder();
+ nodeBuilder.setKey(nodeKey);
+ nodeBuilder.addAugmentation(FlowCapableNode.class, fcnBuilder.build());
+
+ WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
+ writeTx.put(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Nodes.class), nodes);
+ writeTx.put(LogicalDatastoreType.OPERATIONAL, flowNodeIdentifier, nodeBuilder.build());
+ writeTx.put(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(Nodes.class), nodes);
+ writeTx.put(LogicalDatastoreType.CONFIGURATION, flowNodeIdentifier, nodeBuilder.build());
+ assertCommit(writeTx.submit());
+ }
+
+ // Methods to test the install Flow and Group
+
+ public FlowEntity createFlowEntity(String dpnId, String tableId) {
+
+ long dpId;
+ int SERVICE_ID = 0;
+ FlowEntity terminatingServiceTableFlowEntity = null;
+
+ List<ActionInfo> listActionInfo = new ArrayList<ActionInfo>();
+ listActionInfo.add(new ActionInfo(ActionType.punt_to_controller,
+ new String[] {}));
+
+ try {
+ dpId = Long.parseLong(dpnId.split(":")[1]);
+
+ List<MatchInfo> mkMatches = new ArrayList<MatchInfo>();
+ BigInteger COOKIE = new BigInteger("9000000", 16);
+
+ short s_tableId = Short.parseShort(tableId) ;
+
+ mkMatches.add(new MatchInfo(MatchFieldType.tunnel_id, new BigInteger[] {
+ new BigInteger("0000000000000000", 16) }));
+
+ List<InstructionInfo> mkInstructions = new ArrayList<InstructionInfo>();
+ mkInstructions.add(new InstructionInfo(InstructionType.write_actions,
+ listActionInfo));
+
+ terminatingServiceTableFlowEntity = MDSALUtil
+ .buildFlowEntity(
+ dpId,
+ s_tableId,
+ getFlowRef(s_tableId,
+ SERVICE_ID), 5, "Terminating Service Flow Entry: " + SERVICE_ID,
+ 0, 0, COOKIE
+ .add(BigInteger.valueOf(SERVICE_ID)),
+ null, null);
+ } catch (Exception e) {
+ //throw new Exception(e) ;
+ }
+
+ return terminatingServiceTableFlowEntity;
+ }
+
+ private String getFlowRef(short termSvcTable, int svcId) {
+ return new StringBuffer().append(termSvcTable).append(svcId).toString();
+ }
+
+ public GroupEntity createGroupEntity(String Nodeid, String inport, int vlanid) {
+ GroupEntity groupEntity;
+ long id = getUniqueValue(Nodeid, inport);
+ List<BucketInfo> listBucketInfo = new ArrayList<BucketInfo>();
+ List<ActionInfo> listActionInfo = new ArrayList<ActionInfo>();
+ if (vlanid > 0) {
+ listActionInfo.add(new ActionInfo(ActionType.push_vlan, new String[] { null }));
+ listActionInfo.add(new ActionInfo(ActionType.set_field_vlan_vid, new String[] { String.valueOf(vlanid) }));
+ }
+ listActionInfo.add(new ActionInfo(ActionType.output, new String[] { inport, "65535" }));
+ listBucketInfo.add(new BucketInfo(listActionInfo));
+
+ String groupName = "Test Group";
+ groupEntity = MDSALUtil.buildGroupEntity(Long.valueOf(Nodeid), id, groupName, GroupTypes.GroupIndirect,
+ listBucketInfo);
+
+ return groupEntity;
+ }
+
+ private static long getUniqueValue(String nodeId, String inport) {
+
+ Long nodeIdL = Long.valueOf(nodeId);
+ Long inportL = Long.valueOf(inport);
+ long sd_set;
+ sd_set = nodeIdL * 10 + inportL;
+
+ return sd_set;
+ }
+
+}
--- /dev/null
+package org.opendaylight.vpnservice.test;
+
+import java.util.Collection;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+public class MockFlowForwarder extends AbstractMockForwardingRulesManager<Flow> {
+
+ private int nFlowCount = 0;
+
+ private ListenerRegistration<MockFlowForwarder> listenerRegistration;
+
+ public MockFlowForwarder( final DataBroker db) {
+ super() ;
+ registerListener(db) ;
+ }
+
+ private void registerListener(final DataBroker db) {
+ final DataTreeIdentifier<Flow> treeId = new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, getWildCardPath());
+ try {
+ listenerRegistration = db.registerDataTreeChangeListener(treeId, MockFlowForwarder.this);
+ } catch (final Exception e) {
+ throw new IllegalStateException("FlowForwarder registration Listener fail! System needs restart.", e);
+ }
+ }
+
+ private InstanceIdentifier<Flow> getWildCardPath() {
+ return InstanceIdentifier.create(Nodes.class).child(Node.class)
+ .augmentation(FlowCapableNode.class).child(Table.class).child(Flow.class);
+ }
+
+ @Override
+ public void onDataTreeChanged(Collection<DataTreeModification<Flow>> changes) {
+ for (DataTreeModification<Flow> change : changes) {
+ final InstanceIdentifier<Flow> key = change.getRootPath().getRootIdentifier();
+ final DataObjectModification<Flow> mod = change.getRootNode();
+
+ switch (mod.getModificationType()) {
+ case DELETE:
+ nFlowCount -= 1;
+ break;
+ case SUBTREE_MODIFIED:
+ // CHECK IF RQD
+ break;
+ case WRITE:
+ if (mod.getDataBefore() == null) {
+ nFlowCount += 1;
+ } else {
+ // UPDATE COUNT UNCHANGED
+ }
+ break;
+ default:
+ throw new IllegalArgumentException("Unhandled modification type " + mod.getModificationType());
+ }
+ }
+ }
+
+ public int getDataChgCount() {
+ return nFlowCount;
+ }
+}
--- /dev/null
+package org.opendaylight.vpnservice.test;
+
+import java.util.Collection;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+
+public class MockGroupForwarder extends AbstractMockForwardingRulesManager<Group>{
+
+ private int nGroupCount = 0;
+ private ListenerRegistration<MockGroupForwarder> listenerRegistration ;
+
+ public MockGroupForwarder( final DataBroker db) {
+ super() ;
+ registerListener(db) ;
+ }
+
+ private void registerListener(final DataBroker db) {
+ final DataTreeIdentifier<Group> treeId = new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, getWildCardPath());
+ try {
+ listenerRegistration = db.registerDataTreeChangeListener(treeId, MockGroupForwarder.this);
+ } catch (final Exception e) {
+ throw new IllegalStateException("GroupForwarder registration Listener fail! System needs restart.", e);
+ }
+ }
+
+ private InstanceIdentifier<Group> getWildCardPath() {
+ return InstanceIdentifier.create(Nodes.class).child(Node.class).
+ augmentation(FlowCapableNode.class).child(Group.class);
+ }
+
+ @Override
+ public void onDataTreeChanged(Collection<DataTreeModification<Group>> changes) {
+ for (DataTreeModification<Group> change : changes) {
+ final InstanceIdentifier<Group> key = change.getRootPath().getRootIdentifier();
+ final DataObjectModification<Group> mod = change.getRootNode();
+
+ switch (mod.getModificationType()) {
+ case DELETE:
+ nGroupCount -= 1;
+ break;
+ case SUBTREE_MODIFIED:
+ // CHECK IF RQD
+ break;
+ case WRITE:
+ if (mod.getDataBefore() == null) {
+ nGroupCount += 1;
+ } else {
+ // UPDATE COUNT UNCHANGED
+ }
+ break;
+ default:
+ throw new IllegalArgumentException("Unhandled modification type " + mod.getModificationType());
+ }
+ }
+ }
+
+ public int getDataChgCount() {
+ return nGroupCount;
+ }
+}
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent</artifactId>
<version>1.5.0-SNAPSHOT</version>
- <relativePath/>
+ <relativePath/>
</parent>
<groupId>org.opendaylight.vpnservice</groupId>
<?xml version="1.0" encoding="UTF-8"?>
<!-- vi: set et smarttab sw=4 tabstop=4: -->
<!--
- Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
+ Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 which accompanies this distribution,
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>binding-parent</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath/>
- </parent>
+ <parent>
+ <groupId>org.opendaylight.vpnservice</groupId>
+ <artifactId>binding-parent</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <relativePath>../commons/binding-parent</relativePath>
+ </parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>model-bgp</artifactId>
- <version>2013.07.15.7-SNAPSHOT</version>
+ <version>${model.bgp.version}</version>
<name>${project.artifactId}</name>
<description>${project.artifactId}</description>
<packaging>bundle</packaging>
- <properties>
- <!-- ODL -->
- <ietf.inet.types.version>2010.09.24.7-SNAPSHOT</ietf.inet.types.version>
- <ietf.yang.types.version>2010.09.24.7-SNAPSHOT</ietf.yang.types.version>
- <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
- </properties>
-
<dependencies>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>ietf-yang-types</artifactId>
<version>${ietf.yang.types.version}</version>
</dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
</dependencies>
</project>
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <groupId>org.opendaylight.yangtools</groupId>
+ <groupId>org.opendaylight.vpnservice</groupId>
<artifactId>binding-parent</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath/>
+ <version>0.0.1-SNAPSHOT</version>
+ <relativePath>../../commons/binding-parent</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>nexthopmgr-api</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
<packaging>bundle</packaging>
- <properties>
- <!-- ODL -->
- <ietf.inet.types.version>2010.09.24.7-SNAPSHOT</ietf.inet.types.version>
- <ietf.yang.types.version>2010.09.24.7-SNAPSHOT</ietf.yang.types.version>
- <yang.ext.version>2013.09.07.7-SNAPSHOT</yang.ext.version>
- <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
- <mdsal.version>1.2.0-SNAPSHOT</mdsal.version>
- </properties>
-
<dependencies>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<dependency>
<groupId>org.opendaylight.yangtools.model</groupId>
<artifactId>ietf-interfaces</artifactId>
- <version>2014.05.08.7-SNAPSHOT</version>
+ <version>${ietf.interfaces.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.yangtools.model</groupId>
<artifactId>iana-if-type-2014-05-08</artifactId>
- <version>2014.05.08.7-SNAPSHOT</version>
+ <version>${iana.if.type.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.controller.model</groupId>
<?xml version="1.0" encoding="UTF-8"?>
<!-- vi: set et smarttab sw=4 tabstop=4: --><!--
-Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 which accompanies this distribution,
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <groupId>org.opendaylight.controller</groupId>
+ <groupId>org.opendaylight.vpnservice</groupId>
<artifactId>config-parent</artifactId>
- <version>0.3.0-SNAPSHOT</version>
- <relativePath/>
+ <version>0.0.1-SNAPSHOT</version>
+ <relativePath>../../commons/config-parent</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>nexthopmgr-impl</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
<packaging>bundle</packaging>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>vpnmanager-api</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<dependency>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>idmanager-api</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>idmanager-impl</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<version>${project.version}</version>
</dependency>
- <!-- Testing Dependencies -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-all</artifactId>
- <scope>test</scope>
- </dependency>
</dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-checkstyle-plugin</artifactId>
- <configuration>
- <configLocation>
- ${project.basedir}/../../commons/src/main/resources/vpns_checks.xml
- </configLocation>
- <failsOnError>true</failsOnError>
- <includes>**/*.java,**/*.xml,**/*.ini,**/*.sh,**/*.bat</includes>
- <excludes>**/yang/</excludes>
- </configuration>
- </plugin>
- </plugins>
- </build>
+
</project>
*/
public NexthopManager(final DataBroker db) {
broker = db;
- createNexthopPointerPool();
}
@Override
this.idManager = idManager;
}
- private void createNexthopPointerPool() {
+ protected void createNexthopPointerPool() {
CreateIdPoolInput createPool = new CreateIdPoolInputBuilder()
.setPoolName("nextHopPointerPool")
.setIdStart(1L)
Futures.addCallback(tx.submit(), DEFAULT_CALLBACK);
}
-}
\ No newline at end of file
+}
nhManager.setMdsalManager(mdsalManager);
nhManager.setInterfaceManager(interfaceManager);
nhManager.setIdManager(idManager);
+ nhManager.createNexthopPointerPool();
LOG.info("NexthopmgrProvider Session Initiated");
}
<maven>3.1.1</maven>
</prerequisites>
<modules>
- <module>model-bgp</module>
- <module>mdsalutil</module>
+ <module>commons/binding-parent</module>
+ <module>commons/config-parent</module>
+ <module>model-bgp</module>
+ <module>mdsalutil</module>
<module>vpnmanager</module>
<module>interfacemgr</module>
<module>nexthopmgr</module>
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <groupId>org.opendaylight.yangtools</groupId>
+ <groupId>org.opendaylight.vpnservice</groupId>
<artifactId>binding-parent</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath/>
+ <version>0.0.1-SNAPSHOT</version>
+ <relativePath>../../commons/binding-parent</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>vpnmanager-api</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
<packaging>bundle</packaging>
- <properties>
- <!-- ODL -->
- <ietf.inet.types.version>2010.09.24.7-SNAPSHOT</ietf.inet.types.version>
- <ietf.yang.types.version>2010.09.24.7-SNAPSHOT</ietf.yang.types.version>
- <yang.ext.version>2013.09.07.7-SNAPSHOT</yang.ext.version>
- <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
- <mdsal.version>1.2.0-SNAPSHOT</mdsal.version>
- </properties>
-
<dependencies>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<dependency>
<groupId>org.opendaylight.yangtools.model</groupId>
<artifactId>ietf-interfaces</artifactId>
- <version>2014.05.08.7-SNAPSHOT</version>
+ <version>${ietf.interfaces.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.yangtools.model</groupId>
<artifactId>iana-if-type-2014-05-08</artifactId>
- <version>2014.05.08.7-SNAPSHOT</version>
+ <version>${iana.if.type.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>model-bgp</artifactId>
- <version>2013.07.15.7-SNAPSHOT</version>
+ <version>${model.bgp.version}</version>
</dependency>
</dependencies>
</project>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <groupId>org.opendaylight.controller</groupId>
+ <groupId>org.opendaylight.vpnservice</groupId>
<artifactId>config-parent</artifactId>
- <version>0.3.0-SNAPSHOT</version>
- <relativePath/>
+ <version>0.0.1-SNAPSHOT</version>
+ <relativePath>../../commons/config-parent</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>vpnmanager-impl</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
<packaging>bundle</packaging>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>vpnmanager-api</artifactId>
- <version>${project.version}</version>
+ <version>${vpnservices.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>bgpmanager-api</artifactId>
- <version>1.0-SNAPSHOT</version>
+ <version>${vpnservices.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>fibmanager-api</artifactId>
- <version>${project.version}</version>
+ <version>${vpnservices.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>mdsalutil-api</artifactId>
- <version>${project.version}</version>
+ <version>${vpnservices.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>interfacemgr-api</artifactId>
- <version>${project.version}</version>
- </dependency>
- <!-- TEST Dependencies -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- </dependency>
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-all</artifactId>
- <scope>test</scope>
+ <version>${vpnservices.version}</version>
</dependency>
</dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-checkstyle-plugin</artifactId>
- <configuration>
- <configLocation>
- ${project.basedir}/../../commons/src/main/resources/vpns_checks.xml
- </configLocation>
- <failsOnError>true</failsOnError>
- <includes>**/*.java,**/*.xml,**/*.ini</includes>
- <excludes>**/yang/</excludes>
- </configuration>
- </plugin>
- </plugins>
- </build>
</project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>vpnservice-artifacts</artifactId>
- <version>1.0-SNAPSHOT</version>
+ <version>0.1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencyManagement>