mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-20 20:02:17 +02:00
Removed of-save stuff.
This commit is contained in:
parent
5f38b3a1f2
commit
7a9bcbe9c4
@ -1,2 +0,0 @@
|
||||
# See: http://rolf-engelhard.de/2011/04/using-the-same-suppression-filter-for-checkstyle-in-eclipse-and-maven/
|
||||
config_loc=conf/checkstyle
|
@ -1,284 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE module PUBLIC
|
||||
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
|
||||
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
|
||||
|
||||
|
||||
<!--
|
||||
|
||||
Checkstyle configuration that checks the sun coding conventions from:
|
||||
|
||||
- the Java Language Specification at
|
||||
http://java.sun.com/docs/books/jls/second_edition/html/index.html
|
||||
|
||||
- the Sun Code Conventions at http://java.sun.com/docs/codeconv/
|
||||
|
||||
- the Javadoc guidelines at
|
||||
http://java.sun.com/j2se/javadoc/writingdoccomments/index.html
|
||||
|
||||
- the JDK Api documentation http://java.sun.com/j2se/docs/api/index.html
|
||||
|
||||
- some best practices
|
||||
|
||||
Checkstyle is very configurable. Be sure to read the documentation at
|
||||
http://checkstyle.sf.net (or in your downloaded distribution).
|
||||
|
||||
Most Checks are configurable, be sure to consult the documentation.
|
||||
|
||||
To completely disable a check, just comment it out or delete it from the file.
|
||||
|
||||
Finally, it is worth reading the documentation.
|
||||
|
||||
-->
|
||||
|
||||
|
||||
<!--
|
||||
The default severity setting in checkstyle is 'error', so some
|
||||
of the rules below are configured to change the severity to
|
||||
'warning'. Over time, these 'warning' settings should be
|
||||
removed as more of the ONOS source code is modified to
|
||||
follow the recommended rules.
|
||||
-->
|
||||
|
||||
|
||||
|
||||
<module name="Checker">
|
||||
<module name="SuppressionFilter">
|
||||
<property name="file" value="${config_loc}/suppressions.xml"/>
|
||||
</module>
|
||||
<!--
|
||||
If you set the basedir property below, then all reported file
|
||||
names will be relative to the specified directory. See
|
||||
http://checkstyle.sourceforge.net/5.x/config.html#Checker
|
||||
|
||||
<property name="basedir" value="${basedir}"/>
|
||||
-->
|
||||
<!-- Checks that a package-info.java file exists for each package. -->
|
||||
<!-- See http://checkstyle.sf.net/config_javadoc.html#JavadocPackage -->
|
||||
<!-- ONOS does not currently supply package level Javadoc information
|
||||
in package-info files -->
|
||||
<!-- <module name="JavadocPackage"/> -->
|
||||
|
||||
<!-- Checks whether files end with a new line. -->
|
||||
<!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile -->
|
||||
<module name="NewlineAtEndOfFile"/>
|
||||
|
||||
<!-- Checks that property files contain the same keys. -->
|
||||
<!-- See http://checkstyle.sf.net/config_misc.html#Translation -->
|
||||
<module name="Translation"/>
|
||||
|
||||
<!-- Checks for Size Violations. -->
|
||||
<!-- See http://checkstyle.sf.net/config_sizes.html -->
|
||||
<module name="FileLength">
|
||||
<property name="max" value="2500"/>
|
||||
</module>
|
||||
|
||||
<!-- Checks for whitespace -->
|
||||
<!-- See http://checkstyle.sf.net/config_whitespace.html -->
|
||||
<module name="FileTabCharacter"/>
|
||||
|
||||
<!-- Miscellaneous other checks. -->
|
||||
<!-- See http://checkstyle.sf.net/config_misc.html -->
|
||||
<module name="RegexpSingleline">
|
||||
<property name="format" value="\s+$"/>
|
||||
<property name="minimum" value="0"/>
|
||||
<property name="maximum" value="0"/>
|
||||
<property name="message" value="Line has trailing spaces."/>
|
||||
</module>
|
||||
|
||||
<!-- Checks for Headers -->
|
||||
<!-- See http://checkstyle.sf.net/config_header.html -->
|
||||
<!-- <module name="Header"> -->
|
||||
<!-- <property name="headerFile" value="${checkstyle.header.file}"/> -->
|
||||
<!-- <property name="fileExtensions" value="java"/> -->
|
||||
<!-- </module> -->
|
||||
|
||||
<module name="SuppressionCommentFilter">
|
||||
<property name="offCommentFormat" value="(CHECKSTYLE\:OFF|Generated by the protocol buffer compiler.)"/>
|
||||
<property name="onCommentFormat" value="CHECKSTYLE:ON"/>
|
||||
</module>
|
||||
|
||||
<module name="SuppressWithNearbyCommentFilter">
|
||||
<property name="commentFormat" value="CHECKSTYLE IGNORE THIS LINE" />
|
||||
<property name="checkFormat" value=".*" />
|
||||
<property name="influenceFormat" value="0" />
|
||||
</module>
|
||||
|
||||
<!-- Example: // CHECKSTYLE IGNORE FinalClass FOR NEXT 1 LINES -->
|
||||
<module name="SuppressWithNearbyCommentFilter">
|
||||
<property name="commentFormat" value="CHECKSTYLE IGNORE (\w+) FOR NEXT (\d+) LINES"/>
|
||||
<property name="checkFormat" value="$1"/>
|
||||
<property name="influenceFormat" value="$2"/>
|
||||
</module>
|
||||
|
||||
<module name="TreeWalker">
|
||||
|
||||
<module name="FileContentsHolder"/>
|
||||
<!-- Checks for Javadoc comments. -->
|
||||
<!-- See http://checkstyle.sf.net/config_javadoc.html -->
|
||||
<module name="JavadocMethod">
|
||||
<property name="severity" value="warning"/>
|
||||
<property name="allowUndeclaredRTE" value="true"/>
|
||||
</module>
|
||||
<module name="JavadocType">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
<module name="JavadocVariable">
|
||||
<!-- Suppress check for private member Javadocs.
|
||||
Possibly revist fixing these. -->
|
||||
<property name="scope" value="public"/>
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
<module name="JavadocStyle"/>
|
||||
<!-- @author tag should not be used -->
|
||||
<module name="WriteTag">
|
||||
<property name="tag" value="@author"/>
|
||||
<property name="tagFormat" value="\S"/>
|
||||
<property name="severity" value="ignore"/>
|
||||
<property name="tagSeverity" value="error"/>
|
||||
</module>
|
||||
|
||||
|
||||
<!-- Checks for Naming Conventions. -->
|
||||
<!-- See http://checkstyle.sf.net/config_naming.html -->
|
||||
<module name="ConstantName">
|
||||
<!-- ONOS allows the name "log" for static final Loggers -->
|
||||
<property name="format"
|
||||
value="^log$|^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$"/>
|
||||
</module>
|
||||
<module name="LocalFinalVariableName"/>
|
||||
|
||||
<module name="LocalVariableName"/>
|
||||
|
||||
<module name="MemberName"/>
|
||||
<module name="MethodName"/>
|
||||
<module name="PackageName"/>
|
||||
<module name="ParameterName"/>
|
||||
<module name="StaticVariableName"/>
|
||||
<module name="TypeName"/>
|
||||
|
||||
<!-- Checks for imports -->
|
||||
<!-- See http://checkstyle.sf.net/config_import.html -->
|
||||
<module name="AvoidStarImport">
|
||||
<property name="allowStaticMemberImports" value="true"/>
|
||||
</module>
|
||||
<module name="IllegalImport"/>
|
||||
<!-- defaults to sun.* packages -->
|
||||
<module name="RedundantImport"/>
|
||||
<module name="UnusedImports"/>
|
||||
|
||||
|
||||
<!-- Checks for Size Violations. -->
|
||||
<!-- See http://checkstyle.sf.net/config_sizes.html -->
|
||||
<module name="LineLength">
|
||||
<!-- ONOS standard usage is 80 columns, but we allow up
|
||||
to 120 to not break the build. -->
|
||||
<property name="max" value="120"/>
|
||||
<property name="ignorePattern" value="^import"/>
|
||||
</module>
|
||||
<module name="MethodLength">
|
||||
<property name="max" value="400"/>
|
||||
</module>
|
||||
|
||||
<module name="ParameterNumber"/>
|
||||
|
||||
<!-- Checks for whitespace -->
|
||||
<!-- See http://checkstyle.sf.net/config_whitespace.html -->
|
||||
<module name="EmptyForIteratorPad"/>
|
||||
<module name="GenericWhitespace"/>
|
||||
<module name="MethodParamPad"/>
|
||||
<module name="NoWhitespaceAfter"/>
|
||||
<module name="NoWhitespaceBefore"/>
|
||||
|
||||
<!-- Disabled for ONOS. Default rules specify undesired behavior for the '?' operator -->
|
||||
<!-- <module name="OperatorWrap"/> -->
|
||||
<module name="ParenPad"/>
|
||||
<module name="TypecastParenPad"/>
|
||||
<module name="WhitespaceAfter"/>
|
||||
<module name="WhitespaceAround">
|
||||
<property name="allowEmptyConstructors" value="true"/>
|
||||
<property name="allowEmptyMethods" value="true"/>
|
||||
</module>
|
||||
|
||||
|
||||
|
||||
<!-- Modifier Checks -->
|
||||
<!-- See http://checkstyle.sf.net/config_modifiers.html -->
|
||||
<module name="ModifierOrder"/>
|
||||
|
||||
<!-- Disabled for ONOS to allow use of public -->
|
||||
<!-- modifiers in interfaces. -->
|
||||
<!-- <module name="RedundantModifier"/> -->
|
||||
|
||||
|
||||
<!-- Checks for blocks. You know, those {}'s -->
|
||||
<!-- See http://checkstyle.sf.net/config_blocks.html -->
|
||||
<module name="AvoidNestedBlocks">
|
||||
<!-- ONOS alows declarations inside of switch case blocks -->
|
||||
<property name="allowInSwitchCase" value="true"/>
|
||||
</module>
|
||||
<module name="EmptyBlock"/>
|
||||
<module name="LeftCurly"/>
|
||||
<module name="NeedBraces"/>
|
||||
<module name="RightCurly"/>
|
||||
|
||||
<!-- Checks for common coding problems -->
|
||||
<!-- See http://checkstyle.sf.net/config_coding.html -->
|
||||
<!-- ONOS allows conditional operators -->
|
||||
<!-- <module name="AvoidInlineConditionals"/> -->
|
||||
<module name="EmptyStatement"/>
|
||||
<module name="EqualsHashCode"/>
|
||||
|
||||
<module name="HiddenField">
|
||||
<property name="ignoreSetter" value="true"/>
|
||||
<property name="ignoreConstructorParameter" value="true"/>
|
||||
</module>
|
||||
|
||||
<module name="IllegalInstantiation"/>
|
||||
<module name="InnerAssignment"/>
|
||||
|
||||
<!-- Many violations of this rule present, revist in a
|
||||
subsequent round of cleanups -->
|
||||
<!-- <module name="MagicNumber"/> -->
|
||||
<module name="MissingSwitchDefault"/>
|
||||
|
||||
<module name="RedundantThrows">
|
||||
<property name="allowSubclasses" value="true"/>
|
||||
<property name="allowUnchecked" value="true"/>
|
||||
<property name="suppressLoadErrors" value="true"/>
|
||||
</module>
|
||||
|
||||
<module name="SimplifyBooleanExpression"/>
|
||||
<module name="SimplifyBooleanReturn"/>
|
||||
|
||||
<!-- Checks for class design -->
|
||||
<!-- See http://checkstyle.sf.net/config_design.html -->
|
||||
<!-- ONOS produces many warnings of this type.
|
||||
Fixing all of these is outside the scope of the current cleanup. -->
|
||||
<!-- <module name="DesignForExtension"/> -->
|
||||
<module name="FinalClass"/>
|
||||
|
||||
<module name="HideUtilityClassConstructor"/>
|
||||
|
||||
<module name="InterfaceIsType"/>
|
||||
|
||||
<module name="VisibilityModifier">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
|
||||
|
||||
<!-- Miscellaneous other checks. -->
|
||||
<!-- See http://checkstyle.sf.net/config_misc.html -->
|
||||
<module name="ArrayTypeStyle"/>
|
||||
|
||||
<!-- Many violations of this rule currently, too many to fix
|
||||
in the current cleanup. -->
|
||||
<!-- <module name="FinalParameters"/> -->
|
||||
<!-- ONOS allows TODO markers in checked in source code -->
|
||||
<!-- <module name="TodoComment"/> -->
|
||||
<module name="UpperEll"/>
|
||||
|
||||
</module>
|
||||
|
||||
</module>
|
@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE suppressions PUBLIC "-//Puppy Crawl//DTD Suppressions 1.1//EN" "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
|
||||
|
||||
<suppressions>
|
||||
<!--
|
||||
Note: Exclusion definition exists in multiple places.
|
||||
- In file ${findbugs.excludeFilterFile} defined at top of pom.xml
|
||||
- In file conf/checkstyle/onos_suppressions.xml (this file)
|
||||
- maven-pmd-plugin configuration in pom.xml
|
||||
(under build and reporting)
|
||||
-->
|
||||
|
||||
<suppress files=".*" checks="FinalParametersCheck"/>
|
||||
<suppress files=".*" checks="MagicNumbersCheck"/>
|
||||
<suppress files=".*" checks="DesignForExtensionCheck"/>
|
||||
<suppress files=".*" checks="TodoCommentCheck"/>
|
||||
<suppress files=".*" checks="AvoidInlineConditionalsCheck"/>
|
||||
<suppress files=".*" checks="OperatorWrapCheck"/>
|
||||
</suppressions>
|
||||
|
@ -1,18 +0,0 @@
|
||||
<FindBugsFilter>
|
||||
<!--
|
||||
Note: Exclusion definition exists in multiple places.
|
||||
- In file ${findbugs.excludeFilterFile} defined at top of pom.xml (this file)
|
||||
- In file conf/checkstyle/onos_suppressions.xml
|
||||
- maven-pmd-plugin configuration in pom.xml
|
||||
(under build and reporting)
|
||||
-->
|
||||
<Match>
|
||||
<Class name="~net\.onrc\.onos\.core\.datastore\.serializers\..*" />
|
||||
</Match>
|
||||
<Match>
|
||||
<Class name="~.*edu\.stanford\..*"/>
|
||||
</Match>
|
||||
<Match>
|
||||
<Class name="~.org\.projectfloodlight\..*"/>
|
||||
</Match>
|
||||
</FindBugsFilter>
|
@ -1,624 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<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">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<prerequisites>
|
||||
<maven>3.0.4</maven>
|
||||
</prerequisites>
|
||||
<groupId>net.onrc.onos.of.ctl</groupId>
|
||||
<artifactId>io</artifactId>
|
||||
<version>0.0.1</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>of-ctl</name>
|
||||
<url>http://onlab.us/</url>
|
||||
<licenses>
|
||||
<license>
|
||||
<name>Apache License, Version 2.0</name>
|
||||
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||
</license>
|
||||
</licenses>
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>central</id>
|
||||
<name>Maven Central repository</name>
|
||||
<url>https://repo1.maven.org/maven2</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>maven-restlet</id>
|
||||
<name>Public online Restlet repository</name>
|
||||
<url>http://maven.restlet.org</url>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>sonatype-oss-snapshot</id>
|
||||
<name>Sonatype OSS snapshot repository</name>
|
||||
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||
<releases>
|
||||
<enabled>false</enabled>
|
||||
</releases>
|
||||
</repository>
|
||||
</repositories>
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<powermock.version>1.5.5</powermock.version>
|
||||
<restlet.version>2.1.4</restlet.version>
|
||||
<cobertura-maven-plugin.version>2.6</cobertura-maven-plugin.version>
|
||||
<!-- Following 2 findbugs version needs to be updated in sync to match the
|
||||
findbugs version used in findbugs-plugin -->
|
||||
<findbugs.version>3.0.0</findbugs.version>
|
||||
<findbugs-plugin.version>3.0.0</findbugs-plugin.version>
|
||||
<findbugs.effort>Max</findbugs.effort>
|
||||
<findbugs.excludeFilterFile>${project.basedir}/conf/findbugs/exclude.xml</findbugs.excludeFilterFile>
|
||||
<checkstyle-plugin.version>2.12</checkstyle-plugin.version>
|
||||
<!-- To publish javadoc to github,
|
||||
uncomment com.github.github site-maven-plugin and
|
||||
see https://github.com/OPENNETWORKINGLAB/ONOS/pull/425
|
||||
<github.global.server>github</github.global.server>
|
||||
-->
|
||||
<metrics.version>3.0.2</metrics.version>
|
||||
<maven.surefire.plugin.version>2.16</maven.surefire.plugin.version>
|
||||
</properties>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-scr-plugin</artifactId>
|
||||
<version>1.15.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>generate-scr-srcdescriptor</id>
|
||||
<goals>
|
||||
<goal>scr</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<supportedProjectTypes>
|
||||
<supportedProjectType>bundle</supportedProjectType>
|
||||
<supportedProjectType>war</supportedProjectType>
|
||||
</supportedProjectTypes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<version>2.3.6</version>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!-- Note: the checkstyle configuration is also in the reporting section -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||
<version>${checkstyle-plugin.version}</version>
|
||||
<configuration>
|
||||
<configLocation>${project.basedir}/conf/checkstyle/sun_checks.xml</configLocation>
|
||||
<propertiesLocation>${project.basedir}/conf/checkstyle/checkstyle_maven.properties</propertiesLocation>
|
||||
<failsOnError>false</failsOnError>
|
||||
<logViolationsToConsole>true</logViolationsToConsole>
|
||||
<includeTestSourceDirectory>true</includeTestSourceDirectory>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>validate-checkstyle</id>
|
||||
<phase>verify</phase>
|
||||
<goals>
|
||||
<goal>check</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-install-plugin</artifactId>
|
||||
<version>2.5.1</version>
|
||||
<executions>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!-- guice maven plugin for dependency injection inside maven -->
|
||||
<plugin>
|
||||
<groupId>org.apache.camel</groupId>
|
||||
<artifactId>guice-maven-plugin</artifactId>
|
||||
<version>2.11.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<version>2.5</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-deploy-plugin</artifactId>
|
||||
<version>2.8</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>2.6</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-site-plugin</artifactId>
|
||||
<version>3.3</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.1</version>
|
||||
<configuration>
|
||||
<source>1.7</source>
|
||||
<target>1.7</target>
|
||||
<encoding>UTF-8</encoding>
|
||||
<showDeprecation>true</showDeprecation>
|
||||
<showWarnings>true</showWarnings>
|
||||
<compilerArgs>
|
||||
<arg>-Xlint:all</arg>
|
||||
<arg>-Xlint:-serial</arg>
|
||||
<arg>-Werror</arg>
|
||||
</compilerArgs>
|
||||
</configuration>
|
||||
<executions>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>${maven.surefire.plugin.version}</version>
|
||||
<configuration>
|
||||
<!-- FIXME -XX:-UseSplitVerifier added as workaround for JDK 1.7.0u65 + PowerMock issue
|
||||
https://issues.jboss.org/browse/JASSIST-228 -->
|
||||
<argLine>-XX:MaxPermSize=256m -XX:-UseSplitVerifier</argLine>
|
||||
<redirectTestOutputToFile>false</redirectTestOutputToFile>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!-- TODO exec:java no longer used remove at some point? -->
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>exec-maven-plugin</artifactId>
|
||||
<version>1.2.1</version>
|
||||
<configuration>
|
||||
<mainClass>net.onrc.onos.core.main.Main</mainClass>
|
||||
</configuration>
|
||||
<executions>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>2.9.1</version>
|
||||
<configuration>
|
||||
<charset>UTF-8</charset>
|
||||
<locale>en</locale>
|
||||
<author>false</author>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
<configuration>
|
||||
<descriptorRefs>
|
||||
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||
</descriptorRefs>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<!-- Using groovy script to set maven property ${hostname}.
|
||||
This is a workaround to get hostname as a property inside pom file,
|
||||
which current Maven does not provide. -->
|
||||
<groupId>org.codehaus.gmaven</groupId>
|
||||
<artifactId>groovy-maven-plugin</artifactId>
|
||||
<version>2.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>initialize</phase>
|
||||
<goals>
|
||||
<goal>execute</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<source>
|
||||
project.properties["hostname"] = InetAddress.getLocalHost().getHostName()
|
||||
</source>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<version>2.8</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>build-classpath</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>build-classpath</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputFile>${project.basedir}/.javacp.${hostname}</outputFile>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>cobertura-maven-plugin</artifactId>
|
||||
<version>${cobertura-maven-plugin.version}</version>
|
||||
<configuration>
|
||||
<instrumentation>
|
||||
<ignores>
|
||||
<ignore>org.slf4j.*</ignore>
|
||||
</ignores>
|
||||
</instrumentation>
|
||||
<quiet>true</quiet>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>clean</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!-- Note: the findbugs configuration is also in the reporting section -->
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>findbugs-maven-plugin</artifactId>
|
||||
<version>${findbugs-plugin.version}</version>
|
||||
<configuration>
|
||||
<effort>${findbugs.effort}</effort>
|
||||
<excludeFilterFile>${findbugs.excludeFilterFile}</excludeFilterFile>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>validate-findbugs</id>
|
||||
<phase>verify</phase>
|
||||
<goals>
|
||||
<goal>check</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-pmd-plugin</artifactId>
|
||||
<version>3.1</version>
|
||||
<configuration>
|
||||
<!--
|
||||
Note: Exclusion definition exists in multiple places.
|
||||
- In file ${findbugs.excludeFilterFile} defined at top of pom.xml
|
||||
- In file conf/checkstyle/onos_suppressions.xml
|
||||
- maven-pmd-plugin configuration in pom.xml
|
||||
(under build and reporting)
|
||||
-->
|
||||
<rulesets>
|
||||
<ruleset>${basedir}/conf/pmd/ruleset.xml</ruleset>
|
||||
</rulesets>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>validate-pmd</id>
|
||||
<phase>verify</phase>
|
||||
<goals>
|
||||
<!-- Uncomment this goal to make the build fail on pmd errors -->
|
||||
<!--<goal>check</goal>-->
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<!--This plugin's configuration is used to store Eclipse m2e settings
|
||||
only. It has no influence on the Maven build itself. -->
|
||||
<plugin>
|
||||
<groupId>org.eclipse.m2e</groupId>
|
||||
<artifactId>lifecycle-mapping</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<configuration>
|
||||
<lifecycleMappingMetadata>
|
||||
<pluginExecutions>
|
||||
<pluginExecution>
|
||||
<pluginExecutionFilter>
|
||||
<groupId>
|
||||
org.apache.maven.plugins
|
||||
</groupId>
|
||||
<artifactId>
|
||||
maven-dependency-plugin
|
||||
</artifactId>
|
||||
<versionRange>[2.8,)</versionRange>
|
||||
<goals>
|
||||
<goal>build-classpath</goal>
|
||||
</goals>
|
||||
</pluginExecutionFilter>
|
||||
<action>
|
||||
<ignore></ignore>
|
||||
</action>
|
||||
</pluginExecution>
|
||||
<pluginExecution>
|
||||
<pluginExecutionFilter>
|
||||
<groupId>org.codehaus.gmaven</groupId>
|
||||
<artifactId>groovy-maven-plugin</artifactId>
|
||||
<versionRange>[2.0,)</versionRange>
|
||||
<goals>
|
||||
<goal>execute</goal>
|
||||
</goals>
|
||||
</pluginExecutionFilter>
|
||||
<action>
|
||||
<ignore></ignore>
|
||||
</action>
|
||||
</pluginExecution>
|
||||
</pluginExecutions>
|
||||
</lifecycleMappingMetadata>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
<!-- for getting visualization reporting -->
|
||||
<reporting>
|
||||
<excludeDefaults>true</excludeDefaults>
|
||||
<outputDirectory>${project.build.directory}/site</outputDirectory>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-project-info-reports-plugin</artifactId>
|
||||
<version>2.7</version>
|
||||
<configuration>
|
||||
<dependencyDetailsEnabled>false</dependencyDetailsEnabled>
|
||||
<dependencyLocationsEnabled>false</dependencyLocationsEnabled>
|
||||
</configuration>
|
||||
<reportSets>
|
||||
<reportSet>
|
||||
<reports>
|
||||
<report>dependencies</report>
|
||||
<report>scm</report>
|
||||
</reports>
|
||||
</reportSet>
|
||||
</reportSets>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>2.9.1</version>
|
||||
<configuration>
|
||||
<charset>UTF-8</charset>
|
||||
<locale>en</locale>
|
||||
<author>false</author>
|
||||
<excludePackageNames>net.floodlightcontroller.*:net.onrc.onos.core.datastore.serializers</excludePackageNames>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<!-- Note: the checkstyle configuration is also in the build section -->
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||
<version>${checkstyle-plugin.version}</version>
|
||||
<configuration>
|
||||
<configLocation>conf/checkstyle/sun_checks.xml</configLocation>
|
||||
<!--
|
||||
Note: Exclusion definition exists in multiple places.
|
||||
- In file ${findbugs.excludeFilterFile} defined at top of pom.xml
|
||||
- maven-checkstyle-plugin configuration in pom.xml
|
||||
- maven-pmd-plugin configuration in pom.xml
|
||||
(under build and reporting)
|
||||
-->
|
||||
<propertiesLocation>${basedir}/conf/checkstyle/checkstyle_maven.properties</propertiesLocation>
|
||||
<includeTestSourceDirectory>true</includeTestSourceDirectory>
|
||||
</configuration>
|
||||
<reportSets>
|
||||
<reportSet>
|
||||
<reports>
|
||||
<report>checkstyle</report>
|
||||
</reports>
|
||||
</reportSet>
|
||||
</reportSets>
|
||||
</plugin>
|
||||
<!-- Note: the findbugs configuration is also in the build section -->
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>findbugs-maven-plugin</artifactId>
|
||||
<version>${findbugs-plugin.version}</version>
|
||||
<configuration>
|
||||
<effort>${findbugs.effort}</effort>
|
||||
<excludeFilterFile>${findbugs.excludeFilterFile}</excludeFilterFile>
|
||||
<reportPlugins>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>findbugs-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
</reportPlugins>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-pmd-plugin</artifactId>
|
||||
<version>3.1</version>
|
||||
<configuration>
|
||||
<!--
|
||||
Note: Exclusion definition exists in multiple places.
|
||||
- In file ${findbugs.excludeFilterFile} defined at top of pom.xml
|
||||
- In file conf/checkstyle/onos_suppressions.xml
|
||||
- maven-pmd-plugin configuration in pom.xml
|
||||
(under build and reporting)
|
||||
-->
|
||||
<excludes>
|
||||
<exclude>**/datastore/serializers/**</exclude>
|
||||
<exclude>**/edu/stanford/**</exclude>
|
||||
<exclude>**/net/floodlightcontroller/**</exclude>
|
||||
</excludes>
|
||||
<rulesets>
|
||||
<ruleset>${basedir}/conf/pmd/onos_ruleset.xml</ruleset>
|
||||
</rulesets>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jxr-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>cobertura-maven-plugin</artifactId>
|
||||
<version>${cobertura-maven-plugin.version}</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</reporting>
|
||||
<dependencies>
|
||||
<!-- ONOS's direct dependencies -->
|
||||
<dependency>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>org.apache.felix.scr.annotations</artifactId>
|
||||
<version>1.9.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
<version>1.1.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-core</artifactId>
|
||||
<version>1.1.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
<version>1.7.5</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<!-- findbugs suppression annotation and @GuardedBy, etc. -->
|
||||
<groupId>com.google.code.findbugs</groupId>
|
||||
<artifactId>annotations</artifactId>
|
||||
<version>${findbugs.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectfloodlight</groupId>
|
||||
<artifactId>openflowj</artifactId>
|
||||
<version>0.3.6-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<!-- Floodlight's dependencies -->
|
||||
<dependency>
|
||||
<!-- dependency to old version of netty? -->
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty</artifactId>
|
||||
<version>3.9.2.Final</version>
|
||||
</dependency>
|
||||
<!-- Dependency for libraries used for testing -->
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.11</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.easymock</groupId>
|
||||
<artifactId>easymock</artifactId>
|
||||
<version>3.2</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.powermock</groupId>
|
||||
<artifactId>powermock-module-junit4</artifactId>
|
||||
<version>${powermock.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.powermock</groupId>
|
||||
<artifactId>powermock-api-easymock</artifactId>
|
||||
<version>${powermock.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<profiles>
|
||||
<!-- Jenkins by default defines a property BUILD_NUMBER which is used to
|
||||
enable the profile. -->
|
||||
<profile>
|
||||
<id>jenkins</id>
|
||||
<activation>
|
||||
<property>
|
||||
<name>env.BUILD_NUMBER</name>
|
||||
</property>
|
||||
</activation>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>cobertura-maven-plugin</artifactId>
|
||||
<version>${cobertura-maven-plugin.version}</version>
|
||||
<configuration>
|
||||
<formats>
|
||||
<format>xml</format>
|
||||
</formats>
|
||||
<quiet>true</quiet>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>cobertura</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>all-tests</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>${maven.surefire.plugin.version}</version>
|
||||
<configuration combine.self="merge">
|
||||
<excludedGroups></excludedGroups>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>error-prone</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.1</version>
|
||||
<configuration>
|
||||
<compilerArgs combine.children="append">
|
||||
<!-- FIXME -Xlint:-path required when using findbugs + error-prone -->
|
||||
<arg>-Xlint:-path</arg>
|
||||
</compilerArgs>
|
||||
<!-- Turn on error-prone -->
|
||||
<compilerId>javac-with-errorprone</compilerId>
|
||||
<forceJavacCompilerUse>true</forceJavacCompilerUse>
|
||||
</configuration>
|
||||
<dependencies combine.children="append">
|
||||
<dependency>
|
||||
<groupId>com.google.errorprone</groupId>
|
||||
<artifactId>error_prone_core</artifactId>
|
||||
<version>1.1.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.plexus</groupId>
|
||||
<artifactId>plexus-compiler-javac</artifactId>
|
||||
<version>2.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.plexus</groupId>
|
||||
<artifactId>plexus-compiler-javac-errorprone</artifactId>
|
||||
<version>2.3</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
</profiles>
|
||||
</project>
|
@ -1,582 +0,0 @@
|
||||
/**
|
||||
* Copyright 2011, Big Switch Networks, Inc.
|
||||
* Originally created by David Erickson, Stanford University
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License. You may obtain
|
||||
* a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
**/
|
||||
|
||||
package net.onrc.onos.of.ctl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService;
|
||||
import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService.CounterException;
|
||||
import org.onlab.onos.of.controller.impl.util.OrderedCollection;
|
||||
|
||||
import org.jboss.netty.channel.Channel;
|
||||
import org.projectfloodlight.openflow.protocol.OFActionType;
|
||||
import org.projectfloodlight.openflow.protocol.OFCapabilities;
|
||||
import org.projectfloodlight.openflow.protocol.OFDescStatsReply;
|
||||
import org.projectfloodlight.openflow.protocol.OFFeaturesReply;
|
||||
import org.projectfloodlight.openflow.protocol.OFMessage;
|
||||
import org.projectfloodlight.openflow.protocol.OFPortDesc;
|
||||
import org.projectfloodlight.openflow.protocol.OFPortDescStatsReply;
|
||||
import org.projectfloodlight.openflow.protocol.OFPortStatus;
|
||||
import org.projectfloodlight.openflow.protocol.OFStatsReply;
|
||||
import org.projectfloodlight.openflow.protocol.OFStatsRequest;
|
||||
import org.projectfloodlight.openflow.protocol.OFVersion;
|
||||
import org.projectfloodlight.openflow.types.U64;
|
||||
|
||||
|
||||
public interface IOFSwitch {
|
||||
|
||||
/**
|
||||
* OF1.3 switches should support role-request messages as in the 1.3 spec.
|
||||
* OF1.0 switches may or may not support the Nicira role request extensions.
|
||||
* To indicate the support, this property should be set by the associated
|
||||
* OF1.0 switch driver in the net.onrc.onos.core.drivermanager package.
|
||||
* The property will be ignored for OF1.3 switches.
|
||||
*/
|
||||
public static final String SWITCH_SUPPORTS_NX_ROLE = "supportsNxRole";
|
||||
|
||||
|
||||
//************************
|
||||
// Channel related
|
||||
//************************
|
||||
|
||||
/**
|
||||
* Disconnects the switch by closing the TCP connection. Results in a call
|
||||
* to the channel handler's channelDisconnected method for cleanup
|
||||
* @throws IOException
|
||||
*/
|
||||
public void disconnectSwitch();
|
||||
|
||||
/**
|
||||
* Writes to the OFMessage to the output stream.
|
||||
*
|
||||
* @param m
|
||||
* @param bc
|
||||
* @throws IOException
|
||||
*/
|
||||
public void write(OFMessage m) throws IOException;
|
||||
|
||||
/**
|
||||
* Writes the list of messages to the output stream.
|
||||
*
|
||||
* @param msglist
|
||||
* @param bc
|
||||
* @throws IOException
|
||||
*/
|
||||
public void write(List<OFMessage> msglist) throws IOException;
|
||||
|
||||
/**
|
||||
* Gets the date the switch connected to this controller.
|
||||
*
|
||||
* @return the date
|
||||
*/
|
||||
public Date getConnectedSince();
|
||||
|
||||
/**
|
||||
* Gets the next available transaction id.
|
||||
*
|
||||
* @return the next transaction ID
|
||||
*/
|
||||
public int getNextTransactionId();
|
||||
|
||||
/**
|
||||
* Checks if the switch is still connected.
|
||||
* Only call while holding processMessageLock
|
||||
*
|
||||
* @return whether the switch is still disconnected
|
||||
*/
|
||||
public boolean isConnected();
|
||||
|
||||
/**
|
||||
* Sets whether the switch is connected.
|
||||
* Only call while holding modifySwitchLock
|
||||
*
|
||||
* @param connected whether the switch is connected
|
||||
*/
|
||||
public void setConnected(boolean connected);
|
||||
|
||||
/**
|
||||
* Flushes all flows queued for this switch in the current thread.
|
||||
* NOTE: The contract is limited to the current thread
|
||||
*/
|
||||
public void flush();
|
||||
|
||||
/**
|
||||
* Sets the Netty Channel this switch instance is associated with.
|
||||
* <p>
|
||||
* Called immediately after instantiation
|
||||
*
|
||||
* @param channel the channel
|
||||
*/
|
||||
public void setChannel(Channel channel);
|
||||
|
||||
//************************
|
||||
// Switch features related
|
||||
//************************
|
||||
|
||||
/**
|
||||
* Gets the datapathId of the switch.
|
||||
*
|
||||
* @return the switch buffers
|
||||
*/
|
||||
public long getId();
|
||||
|
||||
/**
|
||||
* Gets a string version of the ID for this switch.
|
||||
*
|
||||
* @return string version of the ID
|
||||
*/
|
||||
public String getStringId();
|
||||
|
||||
/**
|
||||
* Gets the number of buffers.
|
||||
*
|
||||
* @return the number of buffers
|
||||
*/
|
||||
public int getNumBuffers();
|
||||
|
||||
public Set<OFCapabilities> getCapabilities();
|
||||
|
||||
public byte getNumTables();
|
||||
|
||||
/**
|
||||
* Returns an OFDescStatsReply message object. Use the methods contained
|
||||
* to retrieve switch descriptions for Manufacturer, Hw/Sw version etc.
|
||||
*/
|
||||
public OFDescStatsReply getSwitchDescription();
|
||||
|
||||
/**
|
||||
* Cancel features reply with a specific transaction ID.
|
||||
* @param transactionId the transaction ID
|
||||
*/
|
||||
public void cancelFeaturesReply(int transactionId);
|
||||
|
||||
/**
|
||||
* Gets the OFActionType set.
|
||||
* <p>
|
||||
* getActions has relevance only for an OpenFlow 1.0 switch.
|
||||
* For OF1.3, each table can support different actions
|
||||
*
|
||||
* @return the action set
|
||||
*/
|
||||
public Set<OFActionType> getActions();
|
||||
|
||||
public void setOFVersion(OFVersion ofv);
|
||||
|
||||
public OFVersion getOFVersion();
|
||||
|
||||
|
||||
//************************
|
||||
// Switch port related
|
||||
//************************
|
||||
|
||||
/**
|
||||
* the type of change that happened to an open flow port.
|
||||
*/
|
||||
public enum PortChangeType {
|
||||
/** Either a new port has been added by the switch, or we are
|
||||
* adding a port we just deleted (via a prior notification) due to
|
||||
* a change in the portNumber-portName mapping.
|
||||
*/
|
||||
ADD,
|
||||
/** some other feature of the port has changed (eg. speed)*/
|
||||
OTHER_UPDATE,
|
||||
/** Either a port has been deleted by the switch, or we are deleting
|
||||
* a port whose portNumber-portName mapping has changed. Note that in
|
||||
* the latter case, a subsequent notification will be sent out to add a
|
||||
* port with the new portNumber-portName mapping.
|
||||
*/
|
||||
DELETE,
|
||||
/** Port is up (i.e. enabled). Presumably an earlier notification had
|
||||
* indicated that it was down. To be UP implies that the port is
|
||||
* administratively considered UP (see ofp_port_config) AND the port
|
||||
* link is up AND the port is no longer blocked (see ofp_port_state).
|
||||
*/
|
||||
UP,
|
||||
/** Port is down (i.e. disabled). Presumably an earlier notification had
|
||||
* indicated that it was up, or the port was always up.
|
||||
* To be DOWN implies that the port has been either
|
||||
* administratively brought down (see ofp_port_config) OR the port
|
||||
* link is down OR the port is blocked (see ofp_port_state).
|
||||
*/
|
||||
DOWN,
|
||||
}
|
||||
|
||||
/**
|
||||
* Describes a change of an open flow port.
|
||||
*/
|
||||
public static class PortChangeEvent {
|
||||
public final OFPortDesc port;
|
||||
public final PortChangeType type;
|
||||
/**
|
||||
* @param port
|
||||
* @param type
|
||||
*/
|
||||
public PortChangeEvent(OFPortDesc port,
|
||||
PortChangeType type) {
|
||||
this.port = port;
|
||||
this.type = type;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see java.lang.Object#hashCode()
|
||||
*/
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((port == null) ? 0 : port.hashCode());
|
||||
result = prime * result + ((type == null) ? 0 : type.hashCode());
|
||||
return result;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see java.lang.Object#equals(java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
PortChangeEvent other = (PortChangeEvent) obj;
|
||||
if (port == null) {
|
||||
if (other.port != null) {
|
||||
return false;
|
||||
}
|
||||
} else if (!port.equals(other.port)) {
|
||||
return false;
|
||||
}
|
||||
if (type != other.type) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see java.lang.Object#toString()
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return "[" + type + " " + port.toString() + "]";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get list of all enabled ports. This will typically be different from
|
||||
* the list of ports in the OFFeaturesReply, since that one is a static
|
||||
* snapshot of the ports at the time the switch connected to the controller
|
||||
* whereas this port list also reflects the port status messages that have
|
||||
* been received.
|
||||
*
|
||||
* @return Unmodifiable list of ports not backed by the underlying collection
|
||||
*/
|
||||
public Collection<OFPortDesc> getEnabledPorts();
|
||||
|
||||
/**
|
||||
* Get list of the port numbers of all enabled ports. This will typically
|
||||
* be different from the list of ports in the OFFeaturesReply, since that
|
||||
* one is a static snapshot of the ports at the time the switch connected
|
||||
* to the controller whereas this port list also reflects the port status
|
||||
* messages that have been received.
|
||||
*
|
||||
* @return Unmodifiable list of ports not backed by the underlying collection
|
||||
*/
|
||||
public Collection<Integer> getEnabledPortNumbers();
|
||||
|
||||
/**
|
||||
* Retrieve the port object by the port number. The port object
|
||||
* is the one that reflects the port status updates that have been
|
||||
* received, not the one from the features reply.
|
||||
*
|
||||
* @param portNumber
|
||||
* @return port object
|
||||
*/
|
||||
public OFPortDesc getPort(int portNumber);
|
||||
|
||||
/**
|
||||
* Retrieve the port object by the port name. The port object
|
||||
* is the one that reflects the port status updates that have been
|
||||
* received, not the one from the features reply.
|
||||
*
|
||||
* @param portName
|
||||
* @return port object
|
||||
*/
|
||||
public OFPortDesc getPort(String portName);
|
||||
|
||||
/**
|
||||
* Add or modify a switch port. This is called by the core controller
|
||||
* code in response to a OFPortStatus message.
|
||||
*
|
||||
* OFPPR_MODIFY and OFPPR_ADD will be treated as equivalent. The OpenFlow
|
||||
* spec is not clear on whether portNames are portNumbers are considered
|
||||
* authoritative identifiers. We treat portNames <-> portNumber mappings
|
||||
* as fixed. If they change, we delete all previous conflicting ports and
|
||||
* add all new ports.
|
||||
*
|
||||
* @param ps the port status message
|
||||
* @return the ordered Collection of changes "applied" to the old ports
|
||||
* of the switch according to the PortStatus message. A single PortStatus
|
||||
* message can result in multiple changes.
|
||||
* If portName <-> portNumber mappings have
|
||||
* changed, the iteration order ensures that delete events for old
|
||||
* conflicting appear before before events adding new ports
|
||||
*/
|
||||
public OrderedCollection<PortChangeEvent> processOFPortStatus(OFPortStatus ps);
|
||||
|
||||
/**
|
||||
* Get list of all ports. This will typically be different from
|
||||
* the list of ports in the OFFeaturesReply, since that one is a static
|
||||
* snapshot of the ports at the time the switch connected to the controller
|
||||
* whereas this port list also reflects the port status messages that have
|
||||
* been received.
|
||||
*
|
||||
* @return Unmodifiable list of ports
|
||||
*/
|
||||
public Collection<OFPortDesc> getPorts();
|
||||
|
||||
/**
|
||||
* @param portName
|
||||
* @return Whether a port is enabled per latest port status message
|
||||
* (not configured down nor link down nor in spanning tree blocking state)
|
||||
*/
|
||||
public boolean portEnabled(int portName);
|
||||
|
||||
/**
|
||||
* @param portNumber
|
||||
* @return Whether a port is enabled per latest port status message
|
||||
* (not configured down nor link down nor in spanning tree blocking state)
|
||||
*/
|
||||
public boolean portEnabled(String portName);
|
||||
|
||||
/**
|
||||
* Compute the changes that would be required to replace the old ports
|
||||
* of this switch with the new ports.
|
||||
* @param ports new ports to set
|
||||
* @return the ordered collection of changes "applied" to the old ports
|
||||
* of the switch in order to set them to the new set.
|
||||
* If portName <-> portNumber mappings have
|
||||
* changed, the iteration order ensures that delete events for old
|
||||
* conflicting appear before before events adding new ports
|
||||
*/
|
||||
public OrderedCollection<PortChangeEvent>
|
||||
comparePorts(Collection<OFPortDesc> ports);
|
||||
|
||||
/**
|
||||
* Replace the ports of this switch with the given ports.
|
||||
* @param ports new ports to set
|
||||
* @return the ordered collection of changes "applied" to the old ports
|
||||
* of the switch in order to set them to the new set.
|
||||
* If portName <-> portNumber mappings have
|
||||
* changed, the iteration order ensures that delete events for old
|
||||
* conflicting appear before before events adding new ports
|
||||
*/
|
||||
public OrderedCollection<PortChangeEvent>
|
||||
setPorts(Collection<OFPortDesc> ports);
|
||||
|
||||
//*******************************************
|
||||
// IOFSwitch object attributes
|
||||
//************************
|
||||
|
||||
/**
|
||||
* Gets attributes of this switch.
|
||||
*
|
||||
* @return attributes of the switch
|
||||
*/
|
||||
public Map<Object, Object> getAttributes();
|
||||
|
||||
/**
|
||||
* Checks if a specific switch property exists for this switch.
|
||||
*
|
||||
* @param name name of property
|
||||
* @return value for name
|
||||
*/
|
||||
boolean hasAttribute(String name);
|
||||
|
||||
/**
|
||||
* Gets properties for switch specific behavior.
|
||||
*
|
||||
* @param name name of property
|
||||
* @return 'value' for 'name', or null if no entry for 'name' exists
|
||||
*/
|
||||
Object getAttribute(String name);
|
||||
|
||||
/**
|
||||
* Sets properties for switch specific behavior.
|
||||
*
|
||||
* @param name name of property
|
||||
* @param value value for name
|
||||
*/
|
||||
void setAttribute(String name, Object value);
|
||||
|
||||
/**
|
||||
* Removes properties for switch specific behavior.
|
||||
*
|
||||
* @param name name of property
|
||||
* @return current value for name or null (if not present)
|
||||
*/
|
||||
Object removeAttribute(String name);
|
||||
|
||||
//************************
|
||||
// Switch statistics
|
||||
//************************
|
||||
|
||||
/**
|
||||
* Delivers the statistics future reply.
|
||||
*
|
||||
* @param reply the reply to deliver
|
||||
*/
|
||||
public void deliverStatisticsReply(OFMessage reply);
|
||||
|
||||
/**
|
||||
* Cancels the statistics reply with the given transaction ID.
|
||||
*
|
||||
* @param transactionId the transaction ID
|
||||
*/
|
||||
public void cancelStatisticsReply(int transactionId);
|
||||
|
||||
/**
|
||||
* Cancels all statistics replies.
|
||||
*/
|
||||
public void cancelAllStatisticsReplies();
|
||||
|
||||
/**
|
||||
* Gets a Future object that can be used to retrieve the asynchronous.
|
||||
* OFStatisticsReply when it is available.
|
||||
*
|
||||
* @param request statistics request
|
||||
* @return Future object wrapping OFStatisticsReply
|
||||
* @throws IOException
|
||||
*/
|
||||
public Future<List<OFStatsReply>> getStatistics(OFStatsRequest<?> request)
|
||||
throws IOException;
|
||||
|
||||
//************************
|
||||
// Switch other utilities
|
||||
//************************
|
||||
|
||||
/**
|
||||
* Clears all flowmods on this switch.
|
||||
*/
|
||||
public void clearAllFlowMods();
|
||||
|
||||
/**
|
||||
* Gets the current role of this controller for this IOFSwitch.
|
||||
*/
|
||||
public Role getRole();
|
||||
|
||||
/**
|
||||
* Sets this controller's Role for this IOFSwitch to role.
|
||||
*
|
||||
* @param role
|
||||
*/
|
||||
public void setRole(Role role);
|
||||
|
||||
/**
|
||||
* Gets the next generation ID.
|
||||
* <p>
|
||||
* Note: relevant for role request messages in OF1.3
|
||||
*
|
||||
* @return next generation ID
|
||||
*/
|
||||
public U64 getNextGenerationId();
|
||||
|
||||
|
||||
/**
|
||||
* Set debug counter service for per-switch counters.
|
||||
* Called immediately after instantiation.
|
||||
* @param debugCounters
|
||||
* @throws CounterException
|
||||
*/
|
||||
public void setDebugCounterService(IDebugCounterService debugCounter)
|
||||
throws CounterException;
|
||||
|
||||
/**
|
||||
* Start this switch driver's sub handshake. This might be a no-op but
|
||||
* this method must be called at least once for the switch to be become
|
||||
* ready.
|
||||
* This method must only be called from the I/O thread
|
||||
* @throws IOException
|
||||
* @throws SwitchDriverSubHandshakeAlreadyStarted if the sub-handshake has
|
||||
* already been started
|
||||
*/
|
||||
public void startDriverHandshake() throws IOException;
|
||||
|
||||
/**
|
||||
* Check if the sub-handshake for this switch driver has been completed.
|
||||
* This method can only be called after startDriverHandshake()
|
||||
*
|
||||
* This methods must only be called from the I/O thread
|
||||
* @return true if the sub-handshake has been completed. False otherwise
|
||||
* @throws SwitchDriverSubHandshakeNotStarted if startDriverHandshake() has
|
||||
* not been called yet.
|
||||
*/
|
||||
public boolean isDriverHandshakeComplete();
|
||||
|
||||
/**
|
||||
* Pass the given OFMessage to the driver as part of this driver's
|
||||
* sub-handshake. Must not be called after the handshake has been completed
|
||||
* This methods must only be called from the I/O thread
|
||||
* @param m The message that the driver should process
|
||||
* @throws SwitchDriverSubHandshakeCompleted if isDriverHandshake() returns
|
||||
* false before this method call
|
||||
* @throws SwitchDriverSubHandshakeNotStarted if startDriverHandshake() has
|
||||
* not been called yet.
|
||||
*/
|
||||
public void processDriverHandshakeMessage(OFMessage m);
|
||||
|
||||
/**
|
||||
* Set the flow table full flag in the switch.
|
||||
* XXX S Rethink this for multiple tables
|
||||
*/
|
||||
public void setTableFull(boolean isFull);
|
||||
|
||||
/**
|
||||
* Save the features reply for this switch.
|
||||
*
|
||||
* @param featuresReply
|
||||
*/
|
||||
public void setFeaturesReply(OFFeaturesReply featuresReply);
|
||||
|
||||
/**
|
||||
* Save the portset for this switch.
|
||||
*
|
||||
* @param portDescReply
|
||||
*/
|
||||
public void setPortDescReply(OFPortDescStatsReply portDescReply);
|
||||
|
||||
//************************
|
||||
// Message handling
|
||||
//************************
|
||||
/**
|
||||
* Handle the message coming from the dataplane.
|
||||
*
|
||||
* @param m the actual message
|
||||
*/
|
||||
public void handleMessage(OFMessage m);
|
||||
|
||||
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
package net.onrc.onos.of.ctl;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.OFVersion;
|
||||
|
||||
import org.onlab.onos.of.controller.impl.registry.IControllerRegistry;
|
||||
|
||||
/**
|
||||
* Interface to passed to controller class in order to allow
|
||||
* it to spawn the appropriate type of switch and furthermore
|
||||
* specify a registry object (ie. ZooKeeper).
|
||||
*
|
||||
*/
|
||||
public interface IOFSwitchManager {
|
||||
|
||||
/**
|
||||
* Given a description string for a switch spawn the
|
||||
* concrete representation of that switch.
|
||||
*
|
||||
* @param mfr manufacturer description
|
||||
* @param hwDesc hardware description
|
||||
* @param swDesc software description
|
||||
* @param ofv openflow version
|
||||
* @return A switch of type IOFSwitch.
|
||||
*/
|
||||
public IOFSwitch getSwitchImpl(String mfr, String hwDesc, String swDesc, OFVersion ofv);
|
||||
|
||||
/**
|
||||
* Returns the mastership registry used during controller-switch role election.
|
||||
* @return the registry
|
||||
*/
|
||||
public IControllerRegistry getRegistry();
|
||||
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
package net.onrc.onos.of.ctl;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.OFControllerRole;
|
||||
|
||||
/**
|
||||
* The role of the controller as it pertains to a particular switch.
|
||||
* Note that this definition of the role enum is different from the
|
||||
* OF1.3 definition. It is maintained here to be backward compatible to
|
||||
* earlier versions of the controller code. This enum is translated
|
||||
* to the OF1.3 enum, before role messages are sent to the switch.
|
||||
* See sendRoleRequestMessage method in OFSwitchImpl
|
||||
*/
|
||||
public enum Role {
|
||||
EQUAL(OFControllerRole.ROLE_EQUAL),
|
||||
MASTER(OFControllerRole.ROLE_MASTER),
|
||||
SLAVE(OFControllerRole.ROLE_SLAVE);
|
||||
|
||||
private Role(OFControllerRole nxRole) {
|
||||
nxRole.ordinal();
|
||||
}
|
||||
/*
|
||||
private static Map<Integer,Role> nxRoleToEnum
|
||||
= new HashMap<Integer,Role>();
|
||||
static {
|
||||
for(Role r: Role.values())
|
||||
nxRoleToEnum.put(r.toNxRole(), r);
|
||||
}
|
||||
public int toNxRole() {
|
||||
return nxRole;
|
||||
}
|
||||
// Return the enum representing the given nxRole or null if no
|
||||
// such role exists
|
||||
public static Role fromNxRole(int nxRole) {
|
||||
return nxRoleToEnum.get(nxRole);
|
||||
}*/
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
/**
|
||||
* Copyright 2012, Big Switch Networks, Inc.
|
||||
* Originally created by David Erickson, Stanford University
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License. You may obtain
|
||||
* a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
**/
|
||||
|
||||
package org.onlab.onos.of.controller.impl.annotations;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* Annotation used to set the category for log messages for a class.
|
||||
*
|
||||
*/
|
||||
@Target({ ElementType.TYPE, ElementType.METHOD })
|
||||
public @interface LogMessageCategory {
|
||||
|
||||
/**
|
||||
* The category for the log messages for this class.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
String value() default "Core";
|
||||
}
|
@ -1,78 +0,0 @@
|
||||
/**
|
||||
* Copyright 2012, Big Switch Networks, Inc.
|
||||
* Originally created by David Erickson, Stanford University
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License. You may obtain
|
||||
* a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
**/
|
||||
|
||||
package org.onlab.onos.of.controller.impl.annotations;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* Annotation used to document log messages. This can be used to generate
|
||||
* documentation on syslog output.
|
||||
*
|
||||
*/
|
||||
@Target({ ElementType.TYPE, ElementType.METHOD })
|
||||
public @interface LogMessageDoc {
|
||||
public static final String NO_ACTION = "No action is required.";
|
||||
public static final String UNKNOWN_ERROR = "An unknown error occured";
|
||||
public static final String GENERIC_ACTION =
|
||||
"Examine the returned error or exception and take " +
|
||||
"appropriate action.";
|
||||
public static final String CHECK_SWITCH =
|
||||
"Check the health of the indicated switch. " +
|
||||
"Test and troubleshoot IP connectivity.";
|
||||
public static final String CHECK_CONTROLLER =
|
||||
"Verify controller system health, CPU usage, and memory. " +
|
||||
"Rebooting the controller node may help if the controller " +
|
||||
"node is in a distressed state.";
|
||||
public static final String REPORT_CONTROLLER_BUG =
|
||||
"This is likely a defect in the controller. Please report this " +
|
||||
"issue. Restarting the controller or switch may help to " +
|
||||
"alleviate.";
|
||||
public static final String REPORT_SWITCH_BUG =
|
||||
"This is likely a defect in the switch. Please report this " +
|
||||
"issue. Restarting the controller or switch may help to " +
|
||||
"alleviate.";
|
||||
|
||||
/**
|
||||
* The log level for the log message.
|
||||
*
|
||||
* @return the log level as a tring
|
||||
*/
|
||||
String level() default "INFO";
|
||||
|
||||
/**
|
||||
* The message that will be printed.
|
||||
*
|
||||
* @return the message
|
||||
*/
|
||||
String message() default UNKNOWN_ERROR;
|
||||
|
||||
/**
|
||||
* An explanation of the meaning of the log message.
|
||||
*
|
||||
* @return the explanation
|
||||
*/
|
||||
String explanation() default UNKNOWN_ERROR;
|
||||
|
||||
/**
|
||||
* The recommendated action associated with the log message.
|
||||
*
|
||||
* @return the recommendation
|
||||
*/
|
||||
String recommendation() default NO_ACTION;
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
/**
|
||||
* Copyright 2012, Big Switch Networks, Inc.
|
||||
* Originally created by David Erickson, Stanford University
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License. You may obtain
|
||||
* a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
**/
|
||||
|
||||
package org.onlab.onos.of.controller.impl.annotations;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* Annotation used to document log messages. This can be used to generate
|
||||
* documentation on syslog output. This version allows multiple log messages
|
||||
* to be documentated on an interface.
|
||||
*
|
||||
*/
|
||||
@Target({ ElementType.TYPE, ElementType.METHOD })
|
||||
public @interface LogMessageDocs {
|
||||
/**
|
||||
* A list of {@link LogMessageDoc} elements.
|
||||
*
|
||||
* @return the list of log message doc
|
||||
*/
|
||||
LogMessageDoc[] value();
|
||||
}
|
@ -1,726 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.debugcounter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* This class implements a central store for all counters used for debugging the
|
||||
* system. For counters based on traffic-type, see ICounterStoreService.
|
||||
*
|
||||
*/
|
||||
public class DebugCounter implements IDebugCounterService {
|
||||
protected static final Logger log = LoggerFactory.getLogger(DebugCounter.class);
|
||||
|
||||
/**
|
||||
* registered counters need a counter id.
|
||||
*/
|
||||
protected AtomicInteger counterIdCounter = new AtomicInteger();
|
||||
|
||||
/**
|
||||
* The counter value.
|
||||
*/
|
||||
protected static class MutableLong {
|
||||
long value = 0;
|
||||
public void increment() { value += 1; }
|
||||
public void increment(long incr) { value += incr; }
|
||||
public long get() { return value; }
|
||||
public void set(long val) { value = val; }
|
||||
}
|
||||
|
||||
/**
|
||||
* protected class to store counter information.
|
||||
*/
|
||||
public static class CounterInfo {
|
||||
String moduleCounterHierarchy;
|
||||
String counterDesc;
|
||||
CounterType ctype;
|
||||
String moduleName;
|
||||
String counterHierarchy;
|
||||
int counterId;
|
||||
boolean enabled;
|
||||
String[] metaData;
|
||||
|
||||
public CounterInfo(int counterId, boolean enabled,
|
||||
String moduleName, String counterHierarchy,
|
||||
String desc, CounterType ctype, String... metaData) {
|
||||
this.moduleCounterHierarchy = moduleName + "/" + counterHierarchy;
|
||||
this.moduleName = moduleName;
|
||||
this.counterHierarchy = counterHierarchy;
|
||||
this.counterDesc = desc;
|
||||
this.ctype = ctype;
|
||||
this.counterId = counterId;
|
||||
this.enabled = enabled;
|
||||
this.metaData = metaData;
|
||||
}
|
||||
|
||||
public String getModuleCounterHierarchy() { return moduleCounterHierarchy; }
|
||||
public String getCounterDesc() { return counterDesc; }
|
||||
public CounterType getCtype() { return ctype; }
|
||||
public String getModuleName() { return moduleName; }
|
||||
public String getCounterHierarchy() { return counterHierarchy; }
|
||||
public int getCounterId() { return counterId; }
|
||||
public boolean isEnabled() { return enabled; }
|
||||
public String[] getMetaData() { return this.metaData.clone(); }
|
||||
}
|
||||
|
||||
//******************
|
||||
// Global stores
|
||||
//******************
|
||||
|
||||
/**
|
||||
* Counter info for a debug counter.
|
||||
*/
|
||||
public static class DebugCounterInfo {
|
||||
CounterInfo cinfo;
|
||||
AtomicLong cvalue;
|
||||
|
||||
public DebugCounterInfo(CounterInfo cinfo) {
|
||||
this.cinfo = cinfo;
|
||||
this.cvalue = new AtomicLong();
|
||||
}
|
||||
public CounterInfo getCounterInfo() {
|
||||
return cinfo;
|
||||
}
|
||||
public Long getCounterValue() {
|
||||
return cvalue.get();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Global debug-counter storage across all threads. These are
|
||||
* updated from the local per thread counters by the flush counters method.
|
||||
*/
|
||||
private static final DebugCounterInfo[] ALLCOUNTERS =
|
||||
new DebugCounterInfo[MAX_COUNTERS];
|
||||
|
||||
|
||||
/**
|
||||
* per module counters, indexed by the module name and storing three levels
|
||||
* of Counter information in the form of CounterIndexStore.
|
||||
*/
|
||||
protected ConcurrentHashMap<String, ConcurrentHashMap<String, CounterIndexStore>>
|
||||
moduleCounters = new ConcurrentHashMap<String,
|
||||
ConcurrentHashMap<String,
|
||||
CounterIndexStore>>();
|
||||
|
||||
protected static class CounterIndexStore {
|
||||
int index;
|
||||
Map<String, CounterIndexStore> nextLevel;
|
||||
|
||||
public CounterIndexStore(int index, Map<String, CounterIndexStore> cis) {
|
||||
this.index = index;
|
||||
this.nextLevel = cis;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* fast global cache for counter ids that are currently active.
|
||||
*/
|
||||
protected Set<Integer> currentCounters = Collections.newSetFromMap(
|
||||
new ConcurrentHashMap<Integer, Boolean>());
|
||||
|
||||
//******************
|
||||
// Thread local stores
|
||||
//******************
|
||||
|
||||
/**
|
||||
* Thread local storage of counter info.
|
||||
*/
|
||||
protected static class LocalCounterInfo {
|
||||
boolean enabled;
|
||||
MutableLong cvalue;
|
||||
|
||||
public LocalCounterInfo(boolean enabled) {
|
||||
this.enabled = enabled;
|
||||
this.cvalue = new MutableLong();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Thread local debug counters used for maintaining counters local to a thread.
|
||||
*/
|
||||
protected final ThreadLocal<LocalCounterInfo[]> threadlocalCounters =
|
||||
new ThreadLocal<LocalCounterInfo[]>() {
|
||||
@Override
|
||||
protected LocalCounterInfo[] initialValue() {
|
||||
return new LocalCounterInfo[MAX_COUNTERS];
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Thread local cache for counter ids that are currently active.
|
||||
*/
|
||||
protected final ThreadLocal<Set<Integer>> threadlocalCurrentCounters =
|
||||
new ThreadLocal<Set<Integer>>() {
|
||||
@Override
|
||||
protected Set<Integer> initialValue() {
|
||||
return new HashSet<Integer>();
|
||||
}
|
||||
};
|
||||
|
||||
//*******************************
|
||||
// IDebugCounter
|
||||
//*******************************
|
||||
|
||||
protected class CounterImpl implements IDebugCounter {
|
||||
private final int counterId;
|
||||
|
||||
public CounterImpl(int counterId) {
|
||||
this.counterId = counterId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateCounterWithFlush() {
|
||||
if (!validCounterId()) {
|
||||
return;
|
||||
}
|
||||
updateCounter(counterId, 1, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateCounterNoFlush() {
|
||||
if (!validCounterId()) {
|
||||
return;
|
||||
}
|
||||
updateCounter(counterId, 1, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateCounterWithFlush(int incr) {
|
||||
if (!validCounterId()) {
|
||||
return;
|
||||
}
|
||||
updateCounter(counterId, incr, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateCounterNoFlush(int incr) {
|
||||
if (!validCounterId()) {
|
||||
return;
|
||||
}
|
||||
updateCounter(counterId, incr, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getCounterValue() {
|
||||
if (!validCounterId()) {
|
||||
return -1;
|
||||
}
|
||||
return ALLCOUNTERS[counterId].cvalue.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if this is a valid counter.
|
||||
* @return true if the counter id is valid
|
||||
*/
|
||||
private boolean validCounterId() {
|
||||
if (counterId < 0 || counterId >= MAX_COUNTERS) {
|
||||
log.error("Invalid counterId invoked");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//*******************************
|
||||
// IDebugCounterService
|
||||
//*******************************
|
||||
|
||||
@Override
|
||||
public IDebugCounter registerCounter(String moduleName, String counterHierarchy,
|
||||
String counterDescription, CounterType counterType,
|
||||
String... metaData)
|
||||
throws CounterException {
|
||||
// check if counter already exists
|
||||
if (!moduleCounters.containsKey(moduleName)) {
|
||||
moduleCounters.putIfAbsent(moduleName,
|
||||
new ConcurrentHashMap<String, CounterIndexStore>());
|
||||
}
|
||||
RetCtrInfo rci = getCounterId(moduleName, counterHierarchy);
|
||||
if (rci.allLevelsFound) {
|
||||
// counter exists
|
||||
log.info("Counter exists for {}/{} -- resetting counters", moduleName,
|
||||
counterHierarchy);
|
||||
resetCounterHierarchy(moduleName, counterHierarchy);
|
||||
return new CounterImpl(rci.ctrIds[rci.foundUptoLevel - 1]);
|
||||
}
|
||||
// check for validity of counter
|
||||
if (rci.levels.length > MAX_HIERARCHY) {
|
||||
String err = "Registry of counterHierarchy " + counterHierarchy +
|
||||
" exceeds max hierachy " + MAX_HIERARCHY + ".. aborting";
|
||||
throw new MaxHierarchyRegistered(err);
|
||||
}
|
||||
if (rci.foundUptoLevel < rci.levels.length - 1) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i <= rci.foundUptoLevel; i++) {
|
||||
sb.append(rci.levels[i]);
|
||||
}
|
||||
String needToRegister = sb.toString();
|
||||
String err = "Attempting to register hierarchical counterHierarchy " +
|
||||
counterHierarchy + " but parts of hierarchy missing. " +
|
||||
"Please register " + needToRegister + " first";
|
||||
throw new MissingHierarchicalLevel(err);
|
||||
}
|
||||
|
||||
// get a new counter id
|
||||
int counterId = counterIdCounter.getAndIncrement();
|
||||
if (counterId >= MAX_COUNTERS) {
|
||||
throw new MaxCountersRegistered("max counters reached");
|
||||
}
|
||||
// create storage for counter
|
||||
boolean enabled = (counterType == CounterType.ALWAYS_COUNT) ? true : false;
|
||||
CounterInfo ci = new CounterInfo(counterId, enabled, moduleName,
|
||||
counterHierarchy, counterDescription,
|
||||
counterType, metaData);
|
||||
ALLCOUNTERS[counterId] = new DebugCounterInfo(ci);
|
||||
|
||||
// account for the new counter in the module counter hierarchy
|
||||
addToModuleCounterHierarchy(moduleName, counterId, rci);
|
||||
|
||||
// finally add to active counters
|
||||
if (enabled) {
|
||||
currentCounters.add(counterId);
|
||||
}
|
||||
return new CounterImpl(counterId);
|
||||
}
|
||||
|
||||
private void updateCounter(int counterId, int incr, boolean flushNow) {
|
||||
if (counterId < 0 || counterId >= MAX_COUNTERS) {
|
||||
return;
|
||||
}
|
||||
|
||||
LocalCounterInfo[] thiscounters = this.threadlocalCounters.get();
|
||||
if (thiscounters[counterId] == null) {
|
||||
// seeing this counter for the first time in this thread - create local
|
||||
// store by consulting global store
|
||||
DebugCounterInfo dc = ALLCOUNTERS[counterId];
|
||||
if (dc != null) {
|
||||
thiscounters[counterId] = new LocalCounterInfo(dc.cinfo.enabled);
|
||||
if (dc.cinfo.enabled) {
|
||||
Set<Integer> thisset = this.threadlocalCurrentCounters.get();
|
||||
thisset.add(counterId);
|
||||
}
|
||||
} else {
|
||||
log.error("updateCounter seen locally for counter {} but no global"
|
||||
+ "storage exists for it yet .. not updating", counterId);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// update local store if enabled locally for updating
|
||||
LocalCounterInfo lc = thiscounters[counterId];
|
||||
if (lc.enabled) {
|
||||
lc.cvalue.increment(incr);
|
||||
if (flushNow) {
|
||||
DebugCounterInfo dc = ALLCOUNTERS[counterId];
|
||||
if (dc.cinfo.enabled) {
|
||||
// globally enabled - flush now
|
||||
dc.cvalue.addAndGet(lc.cvalue.get());
|
||||
lc.cvalue.set(0);
|
||||
} else {
|
||||
// global counter is disabled - don't flush, disable locally
|
||||
lc.enabled = false;
|
||||
Set<Integer> thisset = this.threadlocalCurrentCounters.get();
|
||||
thisset.remove(counterId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void flushCounters() {
|
||||
LocalCounterInfo[] thiscounters = this.threadlocalCounters.get();
|
||||
Set<Integer> thisset = this.threadlocalCurrentCounters.get();
|
||||
ArrayList<Integer> temp = new ArrayList<Integer>();
|
||||
|
||||
for (int counterId : thisset) {
|
||||
LocalCounterInfo lc = thiscounters[counterId];
|
||||
if (lc.cvalue.get() > 0) {
|
||||
DebugCounterInfo dc = ALLCOUNTERS[counterId];
|
||||
if (dc.cinfo.enabled) {
|
||||
// globally enabled - flush now
|
||||
dc.cvalue.addAndGet(lc.cvalue.get());
|
||||
lc.cvalue.set(0);
|
||||
} else {
|
||||
// global counter is disabled - don't flush, disable locally
|
||||
lc.enabled = false;
|
||||
temp.add(counterId);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int cId : temp) {
|
||||
thisset.remove(cId);
|
||||
}
|
||||
|
||||
// At this point it is possible that the thread-local set does not
|
||||
// include a counter that has been enabled and is present in the global set.
|
||||
// We need to sync thread-local currently enabled set of counterIds with
|
||||
// the global set.
|
||||
Sets.SetView<Integer> sv = Sets.difference(currentCounters, thisset);
|
||||
for (int counterId : sv) {
|
||||
if (thiscounters[counterId] != null) {
|
||||
thiscounters[counterId].enabled = true;
|
||||
thisset.add(counterId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetCounterHierarchy(String moduleName, String counterHierarchy) {
|
||||
RetCtrInfo rci = getCounterId(moduleName, counterHierarchy);
|
||||
if (!rci.allLevelsFound) {
|
||||
String missing = rci.levels[rci.foundUptoLevel];
|
||||
log.error("Cannot reset counter hierarchy - missing counter {}", missing);
|
||||
return;
|
||||
}
|
||||
// reset at this level
|
||||
ALLCOUNTERS[rci.ctrIds[rci.foundUptoLevel - 1]].cvalue.set(0);
|
||||
// reset all levels below
|
||||
ArrayList<Integer> resetIds = getHierarchyBelow(moduleName, rci);
|
||||
for (int index : resetIds) {
|
||||
ALLCOUNTERS[index].cvalue.set(0);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetAllCounters() {
|
||||
RetCtrInfo rci = new RetCtrInfo();
|
||||
rci.levels = "".split("/");
|
||||
for (String moduleName : moduleCounters.keySet()) {
|
||||
ArrayList<Integer> resetIds = getHierarchyBelow(moduleName, rci);
|
||||
for (int index : resetIds) {
|
||||
ALLCOUNTERS[index].cvalue.set(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetAllModuleCounters(String moduleName) {
|
||||
Map<String, CounterIndexStore> target = moduleCounters.get(moduleName);
|
||||
RetCtrInfo rci = new RetCtrInfo();
|
||||
rci.levels = "".split("/");
|
||||
|
||||
if (target != null) {
|
||||
ArrayList<Integer> resetIds = getHierarchyBelow(moduleName, rci);
|
||||
for (int index : resetIds) {
|
||||
ALLCOUNTERS[index].cvalue.set(0);
|
||||
}
|
||||
} else {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("No module found with name {}", moduleName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enableCtrOnDemand(String moduleName, String counterHierarchy) {
|
||||
RetCtrInfo rci = getCounterId(moduleName, counterHierarchy);
|
||||
if (!rci.allLevelsFound) {
|
||||
String missing = rci.levels[rci.foundUptoLevel];
|
||||
log.error("Cannot enable counter - counter not found {}", missing);
|
||||
return;
|
||||
}
|
||||
// enable specific counter
|
||||
DebugCounterInfo dc = ALLCOUNTERS[rci.ctrIds[rci.foundUptoLevel - 1]];
|
||||
dc.cinfo.enabled = true;
|
||||
currentCounters.add(dc.cinfo.counterId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disableCtrOnDemand(String moduleName, String counterHierarchy) {
|
||||
RetCtrInfo rci = getCounterId(moduleName, counterHierarchy);
|
||||
if (!rci.allLevelsFound) {
|
||||
String missing = rci.levels[rci.foundUptoLevel];
|
||||
log.error("Cannot disable counter - counter not found {}", missing);
|
||||
return;
|
||||
}
|
||||
// disable specific counter
|
||||
DebugCounterInfo dc = ALLCOUNTERS[rci.ctrIds[rci.foundUptoLevel - 1]];
|
||||
if (dc.cinfo.ctype == CounterType.COUNT_ON_DEMAND) {
|
||||
dc.cinfo.enabled = false;
|
||||
dc.cvalue.set(0);
|
||||
currentCounters.remove(dc.cinfo.counterId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DebugCounterInfo> getCounterHierarchy(String moduleName,
|
||||
String counterHierarchy) {
|
||||
RetCtrInfo rci = getCounterId(moduleName, counterHierarchy);
|
||||
if (!rci.allLevelsFound) {
|
||||
String missing = rci.levels[rci.foundUptoLevel];
|
||||
log.error("Cannot fetch counter - counter not found {}", missing);
|
||||
return Collections.emptyList();
|
||||
}
|
||||
ArrayList<DebugCounterInfo> dcilist = new ArrayList<DebugCounterInfo>();
|
||||
// get counter and all below it
|
||||
DebugCounterInfo dc = ALLCOUNTERS[rci.ctrIds[rci.foundUptoLevel - 1]];
|
||||
dcilist.add(dc);
|
||||
ArrayList<Integer> belowIds = getHierarchyBelow(moduleName, rci);
|
||||
for (int index : belowIds) {
|
||||
dcilist.add(ALLCOUNTERS[index]);
|
||||
}
|
||||
return dcilist;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DebugCounterInfo> getAllCounterValues() {
|
||||
List<DebugCounterInfo> dcilist = new ArrayList<DebugCounterInfo>();
|
||||
RetCtrInfo rci = new RetCtrInfo();
|
||||
rci.levels = "".split("/");
|
||||
|
||||
for (String moduleName : moduleCounters.keySet()) {
|
||||
ArrayList<Integer> resetIds = getHierarchyBelow(moduleName, rci);
|
||||
for (int index : resetIds) {
|
||||
dcilist.add(ALLCOUNTERS[index]);
|
||||
}
|
||||
}
|
||||
return dcilist;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DebugCounterInfo> getModuleCounterValues(String moduleName) {
|
||||
List<DebugCounterInfo> dcilist = new ArrayList<DebugCounterInfo>();
|
||||
RetCtrInfo rci = new RetCtrInfo();
|
||||
rci.levels = "".split("/");
|
||||
|
||||
if (moduleCounters.containsKey(moduleName)) {
|
||||
ArrayList<Integer> resetIds = getHierarchyBelow(moduleName, rci);
|
||||
for (int index : resetIds) {
|
||||
dcilist.add(ALLCOUNTERS[index]);
|
||||
}
|
||||
}
|
||||
return dcilist;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsModuleCounterHierarchy(String moduleName,
|
||||
String counterHierarchy) {
|
||||
if (!moduleCounters.containsKey(moduleName)) {
|
||||
return false;
|
||||
}
|
||||
RetCtrInfo rci = getCounterId(moduleName, counterHierarchy);
|
||||
return rci.allLevelsFound;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsModuleName(String moduleName) {
|
||||
return (moduleCounters.containsKey(moduleName)) ? true : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getModuleList() {
|
||||
List<String> retval = new ArrayList<String>();
|
||||
retval.addAll(moduleCounters.keySet());
|
||||
return retval;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getModuleCounterList(String moduleName) {
|
||||
if (!moduleCounters.containsKey(moduleName)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
List<String> retval = new ArrayList<String>();
|
||||
RetCtrInfo rci = new RetCtrInfo();
|
||||
rci.levels = "".split("/");
|
||||
|
||||
ArrayList<Integer> cids = getHierarchyBelow(moduleName, rci);
|
||||
for (int index : cids) {
|
||||
retval.add(ALLCOUNTERS[index].cinfo.counterHierarchy);
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
//*******************************
|
||||
// Internal Methods
|
||||
//*******************************
|
||||
|
||||
protected class RetCtrInfo {
|
||||
boolean allLevelsFound; // counter indices found all the way down the hierarchy
|
||||
boolean hierarchical; // true if counterHierarchy is hierarchical
|
||||
int foundUptoLevel;
|
||||
int[] ctrIds;
|
||||
String[] levels;
|
||||
|
||||
public RetCtrInfo() {
|
||||
ctrIds = new int[MAX_HIERARCHY];
|
||||
for (int i = 0; i < MAX_HIERARCHY; i++) {
|
||||
ctrIds[i] = -1;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + getOuterType().hashCode();
|
||||
result = prime * result + (allLevelsFound ? 1231 : 1237);
|
||||
result = prime * result + Arrays.hashCode(ctrIds);
|
||||
result = prime * result + foundUptoLevel;
|
||||
result = prime * result + (hierarchical ? 1231 : 1237);
|
||||
result = prime * result + Arrays.hashCode(levels);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object oth) {
|
||||
if (!(oth instanceof RetCtrInfo)) {
|
||||
return false;
|
||||
}
|
||||
RetCtrInfo other = (RetCtrInfo) oth;
|
||||
if (other.allLevelsFound != this.allLevelsFound) {
|
||||
return false;
|
||||
}
|
||||
if (other.hierarchical != this.hierarchical) {
|
||||
return false;
|
||||
}
|
||||
if (other.foundUptoLevel != this.foundUptoLevel) {
|
||||
return false;
|
||||
}
|
||||
if (!Arrays.equals(other.ctrIds, this.ctrIds)) {
|
||||
return false;
|
||||
}
|
||||
if (!Arrays.equals(other.levels, this.levels)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private DebugCounter getOuterType() {
|
||||
return DebugCounter.this;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
protected RetCtrInfo getCounterId(String moduleName, String counterHierarchy) {
|
||||
RetCtrInfo rci = new RetCtrInfo();
|
||||
Map<String, CounterIndexStore> templevel = moduleCounters.get(moduleName);
|
||||
rci.levels = counterHierarchy.split("/");
|
||||
if (rci.levels.length > 1) {
|
||||
rci.hierarchical = true;
|
||||
}
|
||||
if (templevel == null) {
|
||||
log.error("moduleName {} does not exist in debugCounters", moduleName);
|
||||
return rci;
|
||||
}
|
||||
|
||||
/*
|
||||
if (rci.levels.length > MAX_HIERARCHY) {
|
||||
// chop off all array elems greater that MAX_HIERARCHY
|
||||
String[] temp = new String[MAX_HIERARCHY];
|
||||
System.arraycopy(rci.levels, 0, temp, 0, MAX_HIERARCHY);
|
||||
rci.levels = temp;
|
||||
}
|
||||
*/
|
||||
for (int i = 0; i < rci.levels.length; i++) {
|
||||
if (templevel != null) {
|
||||
CounterIndexStore cis = templevel.get(rci.levels[i]);
|
||||
if (cis == null) {
|
||||
// could not find counterHierarchy part at this level
|
||||
break;
|
||||
} else {
|
||||
rci.ctrIds[i] = cis.index;
|
||||
templevel = cis.nextLevel;
|
||||
rci.foundUptoLevel++;
|
||||
if (i == rci.levels.length - 1) {
|
||||
rci.allLevelsFound = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// there are no more levels, which means that some part of the
|
||||
// counterHierarchy has no corresponding map
|
||||
break;
|
||||
}
|
||||
}
|
||||
return rci;
|
||||
}
|
||||
|
||||
protected void addToModuleCounterHierarchy(String moduleName, int counterId,
|
||||
RetCtrInfo rci) {
|
||||
Map<String, CounterIndexStore> target = moduleCounters.get(moduleName);
|
||||
if (target == null) {
|
||||
return;
|
||||
}
|
||||
CounterIndexStore cis = null;
|
||||
|
||||
for (int i = 0; i < rci.foundUptoLevel; i++) {
|
||||
cis = target.get(rci.levels[i]);
|
||||
target = cis.nextLevel;
|
||||
}
|
||||
if (cis != null) {
|
||||
if (cis.nextLevel == null) {
|
||||
cis.nextLevel = new ConcurrentHashMap<String, CounterIndexStore>();
|
||||
}
|
||||
cis.nextLevel.put(rci.levels[rci.foundUptoLevel],
|
||||
new CounterIndexStore(counterId, null));
|
||||
} else {
|
||||
target.put(rci.levels[rci.foundUptoLevel],
|
||||
new CounterIndexStore(counterId, null));
|
||||
}
|
||||
}
|
||||
|
||||
// given a partial hierarchical counter, return the rest of the hierarchy
|
||||
protected ArrayList<Integer> getHierarchyBelow(String moduleName, RetCtrInfo rci) {
|
||||
Map<String, CounterIndexStore> target = moduleCounters.get(moduleName);
|
||||
CounterIndexStore cis = null;
|
||||
ArrayList<Integer> retval = new ArrayList<Integer>();
|
||||
if (target == null) {
|
||||
return retval;
|
||||
}
|
||||
|
||||
// get to the level given
|
||||
for (int i = 0; i < rci.foundUptoLevel; i++) {
|
||||
cis = target.get(rci.levels[i]);
|
||||
target = cis.nextLevel;
|
||||
}
|
||||
|
||||
if (target == null || rci.foundUptoLevel == MAX_HIERARCHY) {
|
||||
// no more levels
|
||||
return retval;
|
||||
} else {
|
||||
// recursively get all ids
|
||||
getIdsAtLevel(target, retval, rci.foundUptoLevel + 1);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
protected void getIdsAtLevel(Map<String, CounterIndexStore> hcy,
|
||||
ArrayList<Integer> retval, int level) {
|
||||
if (level > MAX_HIERARCHY) {
|
||||
return;
|
||||
}
|
||||
if (hcy == null || retval == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Can return the counter names as well but for now ids are enough.
|
||||
for (CounterIndexStore cistemp : hcy.values()) {
|
||||
retval.add(cistemp.index); // value at this level
|
||||
if (cistemp.nextLevel != null) {
|
||||
getIdsAtLevel(cistemp.nextLevel, retval, level + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.debugcounter;
|
||||
|
||||
public interface IDebugCounter {
|
||||
/**
|
||||
* Increments the counter by 1 thread-locally, and immediately flushes to
|
||||
* the global counter storage. This method should be used for counters that
|
||||
* are updated outside the OF message processing pipeline.
|
||||
*/
|
||||
void updateCounterWithFlush();
|
||||
|
||||
/**
|
||||
* Increments the counter by 1 thread-locally. Flushing to the global
|
||||
* counter storage is delayed (happens with flushCounters() in IDebugCounterService),
|
||||
* resulting in higher performance. This method should be used for counters
|
||||
* updated in the OF message processing pipeline.
|
||||
*/
|
||||
void updateCounterNoFlush();
|
||||
|
||||
/**
|
||||
* Increments the counter thread-locally by the 'incr' specified, and immediately
|
||||
* flushes to the global counter storage. This method should be used for counters
|
||||
* that are updated outside the OF message processing pipeline.
|
||||
*/
|
||||
void updateCounterWithFlush(int incr);
|
||||
|
||||
/**
|
||||
* Increments the counter thread-locally by the 'incr' specified. Flushing to the global
|
||||
* counter storage is delayed (happens with flushCounters() in IDebugCounterService),
|
||||
* resulting in higher performance. This method should be used for counters
|
||||
* updated in the OF message processing pipeline.
|
||||
*/
|
||||
void updateCounterNoFlush(int incr);
|
||||
|
||||
/**
|
||||
* Retrieve the value of the counter from the global counter store.
|
||||
*/
|
||||
long getCounterValue();
|
||||
}
|
@ -1,260 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.debugcounter;
|
||||
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.onlab.onos.of.controller.impl.debugcounter.DebugCounter.DebugCounterInfo;
|
||||
|
||||
public interface IDebugCounterService {
|
||||
|
||||
/**
|
||||
* Different counter types. Counters that are meant to be counted-on-demand
|
||||
* need to be separately enabled/disabled.
|
||||
*/
|
||||
public enum CounterType {
|
||||
ALWAYS_COUNT,
|
||||
COUNT_ON_DEMAND
|
||||
}
|
||||
|
||||
/**
|
||||
* Debug Counter Qualifiers.
|
||||
*/
|
||||
public static final String CTR_MDATA_WARN = "warn";
|
||||
public static final String CTR_MDATA_ERROR = "error";
|
||||
public static final String CTR_MDATA_DROP = "drop";
|
||||
|
||||
/**
|
||||
* A limit on the maximum number of counters that can be created.
|
||||
*/
|
||||
public static final int MAX_COUNTERS = 5000;
|
||||
|
||||
/**
|
||||
* Exception thrown when MAX_COUNTERS have been registered.
|
||||
*/
|
||||
public class MaxCountersRegistered extends CounterException {
|
||||
private static final long serialVersionUID = 3173747663719376745L;
|
||||
String errormsg;
|
||||
public MaxCountersRegistered(String errormsg) {
|
||||
this.errormsg = errormsg;
|
||||
}
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return this.errormsg;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Exception thrown when MAX_HIERARCHY has been reached.
|
||||
*/
|
||||
public class MaxHierarchyRegistered extends CounterException {
|
||||
private static final long serialVersionUID = 967431358683523871L;
|
||||
private String errormsg;
|
||||
public MaxHierarchyRegistered(String errormsg) {
|
||||
this.errormsg = errormsg;
|
||||
}
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return this.errormsg;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Exception thrown when attempting to register a hierarchical counter
|
||||
* where higher levels of the hierarchy have not been pre-registered.
|
||||
*/
|
||||
public class MissingHierarchicalLevel extends CounterException {
|
||||
private static final long serialVersionUID = 517315311533995739L;
|
||||
private String errormsg;
|
||||
public MissingHierarchicalLevel(String errormsg) {
|
||||
this.errormsg = errormsg;
|
||||
}
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return this.errormsg;
|
||||
}
|
||||
}
|
||||
|
||||
public class CounterException extends Exception {
|
||||
private static final long serialVersionUID = 2219781500857866035L;
|
||||
}
|
||||
|
||||
/**
|
||||
* maximum levels of hierarchy.
|
||||
* Example of moduleName/counterHierarchy:
|
||||
* switch/00:00:00:00:01:02:03:04/pktin/drops where
|
||||
* moduleName ==> "switch" and
|
||||
* counterHierarchy of 3 ==> "00:00:00:00:01:02:03:04/pktin/drops"
|
||||
*/
|
||||
public static final int MAX_HIERARCHY = 3;
|
||||
|
||||
/**
|
||||
* All modules that wish to have the DebugCounterService count for them, must
|
||||
* register their counters by making this call (typically from that module's
|
||||
* 'startUp' method). The counter can then be updated, displayed, reset etc.
|
||||
* using the registered moduleName and counterHierarchy.
|
||||
*
|
||||
* @param moduleName the name of the module which is registering the
|
||||
* counter eg. linkdiscovery or controller or switch
|
||||
* @param counterHierarchy the hierarchical counter name specifying all
|
||||
* the hierarchical levels that come above it.
|
||||
* For example: to register a drop counter for
|
||||
* packet-ins from a switch, the counterHierarchy
|
||||
* can be "00:00:00:00:01:02:03:04/pktin/drops"
|
||||
* It is necessary that counters in hierarchical levels
|
||||
* above have already been pre-registered - in this
|
||||
* example: "00:00:00:00:01:02:03:04/pktin" and
|
||||
* "00:00:00:00:01:02:03:04"
|
||||
* @param counterDescription a descriptive string that gives more information
|
||||
* of what the counter is measuring. For example,
|
||||
* "Measures the number of incoming packets seen by
|
||||
* this module".
|
||||
* @param counterType One of CounterType. On-demand counter types
|
||||
* need to be explicitly enabled/disabled using other
|
||||
* methods in this API -- i.e. registering them is
|
||||
* not enough to start counting.
|
||||
* @param metaData variable arguments that qualify a counter
|
||||
* eg. warn, error etc.
|
||||
* @return IDebugCounter with update methods that can be
|
||||
* used to update a counter.
|
||||
* @throws MaxCountersRegistered
|
||||
* @throws MaxHierarchyRegistered
|
||||
* @throws MissingHierarchicalLevel
|
||||
*/
|
||||
public IDebugCounter registerCounter(String moduleName, String counterHierarchy,
|
||||
String counterDescription, CounterType counterType,
|
||||
String... metaData)
|
||||
throws CounterException;
|
||||
|
||||
/**
|
||||
* Flush all thread-local counter values (from the current thread)
|
||||
* to the global counter store. This method is not intended for use by any
|
||||
* module. It's typical usage is from core and it is meant
|
||||
* to flush those counters that are updated in the packet-processing pipeline,
|
||||
* typically with the 'updateCounterNoFlush" methods in IDebugCounter.
|
||||
*/
|
||||
public void flushCounters();
|
||||
|
||||
/**
|
||||
* Resets the value of counters in the hierarchy to zero. Note that the reset
|
||||
* applies to the level of counter hierarchy specified AND ALL LEVELS BELOW it
|
||||
* in the hierarchy.
|
||||
* For example: If a hierarchy exists like "00:00:00:00:01:02:03:04/pktin/drops"
|
||||
* specifying a reset hierarchy: "00:00:00:00:01:02:03:04"
|
||||
* will reset all counters for the switch dpid specified;
|
||||
* while specifying a reset hierarchy: ""00:00:00:00:01:02:03:04/pktin"
|
||||
* will reset the pktin counter and all levels below it (like drops)
|
||||
* for the switch dpid specified.
|
||||
*/
|
||||
void resetCounterHierarchy(String moduleName, String counterHierarchy);
|
||||
|
||||
/**
|
||||
* Resets the values of all counters in the system.
|
||||
*/
|
||||
public void resetAllCounters();
|
||||
|
||||
/**
|
||||
* Resets the values of all counters belonging
|
||||
* to a module with the given 'moduleName'.
|
||||
*/
|
||||
public void resetAllModuleCounters(String moduleName);
|
||||
|
||||
/**
|
||||
* This method applies only to CounterType.COUNT_ON_DEMAND. It is used to
|
||||
* enable counting on the counter. Note that this step is necessary to start
|
||||
* counting for these counter types - merely registering the counter is not
|
||||
* enough (as is the case for CounterType.ALWAYS_COUNT). Newly
|
||||
* enabled counters start from an initial value of zero.
|
||||
*
|
||||
* Enabling a counter in a counterHierarchy enables only THAT counter. It
|
||||
* does not enable any other part of the counterHierarchy. For example, if
|
||||
* a hierarchy exists like "00:00:00:00:01:02:03:04/pktin/drops", where the
|
||||
* 'pktin' and 'drops' counters are CounterType.COUNT_ON_DEMAND, then enabling
|
||||
* the 'pktin' counter by specifying the counterHierarchy as
|
||||
* "00:00:00:00:01:02:03:04/pktin" does NOT enable the 'drops' counter.
|
||||
*/
|
||||
public void enableCtrOnDemand(String moduleName, String counterHierarchy);
|
||||
|
||||
/**
|
||||
* This method applies only to CounterType.COUNT_ON_DEMAND. It is used to
|
||||
* enable counting on the counter. Note that disabling a counter results in a loss
|
||||
* of the counter value. When re-enabled the counter will restart from zero.
|
||||
*
|
||||
* Disabling a counter in a counterHierarchy disables only THAT counter. It
|
||||
* does not disable any other part of the counterHierarchy. For example, if
|
||||
* a hierarchy exists like "00:00:00:00:01:02:03:04/pktin/drops", where the
|
||||
* 'pktin' and 'drops' counters are CounterType.COUNT_ON_DEMAND, then disabling
|
||||
* the 'pktin' counter by specifying the counterHierarchy as
|
||||
* "00:00:00:00:01:02:03:04/pktin" does NOT disable the 'drops' counter.
|
||||
*/
|
||||
public void disableCtrOnDemand(String moduleName, String counterHierarchy);
|
||||
|
||||
/**
|
||||
* Get counter value and associated information for the specified counterHierarchy.
|
||||
* Note that information on the level of counter hierarchy specified
|
||||
* AND ALL LEVELS BELOW it in the hierarchy will be returned.
|
||||
*
|
||||
* For example,
|
||||
* if a hierarchy exists like "00:00:00:00:01:02:03:04/pktin/drops", then
|
||||
* specifying a counterHierarchy of "00:00:00:00:01:02:03:04/pktin" in the
|
||||
* get call will return information on the 'pktin' as well as the 'drops'
|
||||
* counters for the switch dpid specified.
|
||||
*
|
||||
* @return A list of DebugCounterInfo or an empty list if the counter
|
||||
* could not be found
|
||||
*/
|
||||
public List<DebugCounterInfo> getCounterHierarchy(String moduleName,
|
||||
String counterHierarchy);
|
||||
|
||||
/**
|
||||
* Get counter values and associated information for all counters in the
|
||||
* system.
|
||||
*
|
||||
* @return the list of values/info or an empty list
|
||||
*/
|
||||
public List<DebugCounterInfo> getAllCounterValues();
|
||||
|
||||
/**
|
||||
* Get counter values and associated information for all counters associated
|
||||
* with a module.
|
||||
*
|
||||
* @param moduleName
|
||||
* @return the list of values/info or an empty list
|
||||
*/
|
||||
public List<DebugCounterInfo> getModuleCounterValues(String moduleName);
|
||||
|
||||
/**
|
||||
* Convenience method to figure out if the the given 'counterHierarchy' corresponds
|
||||
* to a registered counterHierarchy for 'moduleName'. Note that the counter may or
|
||||
* may not be enabled for counting, but if it is registered the method will
|
||||
* return true.
|
||||
*
|
||||
* @param param
|
||||
* @return false if moduleCounterHierarchy is not a registered counter
|
||||
*/
|
||||
public boolean containsModuleCounterHierarchy(String moduleName,
|
||||
String counterHierarchy);
|
||||
|
||||
/**
|
||||
* Convenience method to figure out if the the given 'moduleName' corresponds
|
||||
* to a registered moduleName or not. Note that the module may or may not have
|
||||
* a counter enabled for counting, but if it is registered the method will
|
||||
* return true.
|
||||
*
|
||||
* @param param
|
||||
* @return false if moduleName is not a registered counter
|
||||
*/
|
||||
public boolean containsModuleName(String moduleName);
|
||||
|
||||
/**
|
||||
* Returns a list of moduleNames registered for debug counters or an empty
|
||||
* list if no counters have been registered in the system.
|
||||
*/
|
||||
public List<String> getModuleList();
|
||||
|
||||
/**
|
||||
* Returns a list of all counters registered for a specific moduleName
|
||||
* or a empty list.
|
||||
*/
|
||||
public List<String> getModuleCounterList(String moduleName);
|
||||
|
||||
|
||||
}
|
@ -1,116 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.debugcounter;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.onlab.onos.of.controller.impl.debugcounter.DebugCounter.DebugCounterInfo;
|
||||
|
||||
public class NullDebugCounter implements IDebugCounterService {
|
||||
|
||||
@Override
|
||||
public void flushCounters() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetAllCounters() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetAllModuleCounters(String moduleName) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void resetCounterHierarchy(String moduleName, String counterHierarchy) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enableCtrOnDemand(String moduleName, String counterHierarchy) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disableCtrOnDemand(String moduleName, String counterHierarchy) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DebugCounterInfo> getCounterHierarchy(String moduleName,
|
||||
String counterHierarchy) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DebugCounterInfo> getAllCounterValues() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DebugCounterInfo> getModuleCounterValues(String moduleName) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsModuleCounterHierarchy(String moduleName,
|
||||
String counterHierarchy) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsModuleName(String moduleName) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public
|
||||
IDebugCounter
|
||||
registerCounter(String moduleName, String counterHierarchy,
|
||||
String counterDescription,
|
||||
CounterType counterType, String... metaData)
|
||||
throws MaxCountersRegistered {
|
||||
return new NullCounterImpl();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getModuleList() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getModuleCounterList(String moduleName) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
public static class NullCounterImpl implements IDebugCounter {
|
||||
|
||||
@Override
|
||||
public void updateCounterWithFlush() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateCounterNoFlush() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateCounterWithFlush(int incr) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateCounterNoFlush(int incr) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getCounterValue() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,839 +0,0 @@
|
||||
/**
|
||||
* Copyright 2011, Big Switch Networks, Inc.
|
||||
* Originally created by David Erickson, Stanford University
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License. You may obtain
|
||||
* a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
**/
|
||||
|
||||
package org.onlab.onos.of.controller.impl.internal;
|
||||
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.lang.management.RuntimeMXBean;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
import net.onrc.onos.of.ctl.IOFSwitchManager;
|
||||
import net.onrc.onos.of.ctl.Role;
|
||||
import org.onlab.onos.of.controller.impl.annotations.LogMessageDoc;
|
||||
import org.onlab.onos.of.controller.impl.annotations.LogMessageDocs;
|
||||
import org.onlab.onos.of.controller.impl.debugcounter.DebugCounter;
|
||||
import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounter;
|
||||
import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService;
|
||||
import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService.CounterException;
|
||||
import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService.CounterType;
|
||||
import org.onlab.onos.of.controller.impl.internal.OFChannelHandler.RoleRecvStatus;
|
||||
import org.onlab.onos.of.controller.impl.registry.IControllerRegistry;
|
||||
import org.onlab.onos.of.controller.impl.registry.RegistryException;
|
||||
import org.onlab.onos.of.controller.impl.registry.IControllerRegistry.ControlChangeCallback;
|
||||
import org.onlab.onos.of.controller.impl.util.Dpid;
|
||||
import org.onlab.onos.of.controller.impl.util.DummySwitchForTesting;
|
||||
import org.onlab.onos.of.controller.impl.util.InstanceId;
|
||||
import net.onrc.onos.of.ctl.IOFSwitch;
|
||||
import net.onrc.onos.of.ctl.IOFSwitch.PortChangeType;
|
||||
|
||||
import org.apache.felix.scr.annotations.Activate;
|
||||
import org.apache.felix.scr.annotations.Component;
|
||||
import org.jboss.netty.bootstrap.ServerBootstrap;
|
||||
import org.jboss.netty.channel.ChannelPipelineFactory;
|
||||
import org.jboss.netty.channel.group.ChannelGroup;
|
||||
import org.jboss.netty.channel.group.DefaultChannelGroup;
|
||||
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
|
||||
import org.projectfloodlight.openflow.protocol.OFDescStatsReply;
|
||||
import org.projectfloodlight.openflow.protocol.OFFactories;
|
||||
import org.projectfloodlight.openflow.protocol.OFFactory;
|
||||
import org.projectfloodlight.openflow.protocol.OFPortDesc;
|
||||
import org.projectfloodlight.openflow.protocol.OFVersion;
|
||||
import org.projectfloodlight.openflow.util.HexString;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
||||
/**
|
||||
* The main controller class. Handles all setup and network listeners
|
||||
* - Distributed ownership control of switch through IControllerRegistryService
|
||||
*/
|
||||
@Component(immediate = true)
|
||||
public class Controller {
|
||||
|
||||
protected static final Logger log = LoggerFactory.getLogger(Controller.class);
|
||||
static final String ERROR_DATABASE =
|
||||
"The controller could not communicate with the system database.";
|
||||
protected static final OFFactory FACTORY13 = OFFactories.getFactory(OFVersion.OF_13);
|
||||
protected static final OFFactory FACTORY10 = OFFactories.getFactory(OFVersion.OF_10);
|
||||
|
||||
// connectedSwitches cache contains all connected switch's channelHandlers
|
||||
// including ones where this controller is a master/equal/slave controller
|
||||
// as well as ones that have not been activated yet
|
||||
protected ConcurrentHashMap<Long, OFChannelHandler> connectedSwitches;
|
||||
// These caches contains only those switches that are active
|
||||
protected ConcurrentHashMap<Long, IOFSwitch> activeMasterSwitches;
|
||||
protected ConcurrentHashMap<Long, IOFSwitch> activeEqualSwitches;
|
||||
// lock to synchronize on, when manipulating multiple caches above
|
||||
private Object multiCacheLock;
|
||||
|
||||
// The controllerNodeIPsCache maps Controller IDs to their IP address.
|
||||
// It's only used by handleControllerNodeIPsChanged
|
||||
protected HashMap<String, String> controllerNodeIPsCache;
|
||||
|
||||
// Module dependencies
|
||||
|
||||
protected IControllerRegistry registryService;
|
||||
protected IDebugCounterService debugCounters;
|
||||
|
||||
|
||||
private IOFSwitchManager switchManager;
|
||||
|
||||
// Configuration options
|
||||
protected int openFlowPort = 6633;
|
||||
protected int workerThreads = 0;
|
||||
|
||||
// defined counters
|
||||
private Counters counters;
|
||||
|
||||
// Start time of the controller
|
||||
protected long systemStartTime;
|
||||
|
||||
// Flag to always flush flow table on switch reconnect (HA or otherwise)
|
||||
protected boolean alwaysClearFlowsOnSwAdd = false;
|
||||
private InstanceId instanceId;
|
||||
|
||||
// Perf. related configuration
|
||||
protected static final int SEND_BUFFER_SIZE = 4 * 1024 * 1024;
|
||||
protected static final int BATCH_MAX_SIZE = 100;
|
||||
protected static final boolean ALWAYS_DECODE_ETH = true;
|
||||
|
||||
protected boolean addConnectedSwitch(long dpid, OFChannelHandler h) {
|
||||
if (connectedSwitches.get(dpid) != null) {
|
||||
log.error("Trying to add connectedSwitch but found a previous "
|
||||
+ "value for dpid: {}", dpid);
|
||||
return false;
|
||||
} else {
|
||||
log.error("Added switch {}", dpid);
|
||||
connectedSwitches.put(dpid, h);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean validActivation(long dpid) {
|
||||
if (connectedSwitches.get(dpid) == null) {
|
||||
log.error("Trying to activate switch but is not in "
|
||||
+ "connected switches: dpid {}. Aborting ..",
|
||||
HexString.toHexString(dpid));
|
||||
return false;
|
||||
}
|
||||
if (activeMasterSwitches.get(dpid) != null ||
|
||||
activeEqualSwitches.get(dpid) != null) {
|
||||
log.error("Trying to activate switch but it is already "
|
||||
+ "activated: dpid {}. Found in activeMaster: {} "
|
||||
+ "Found in activeEqual: {}. Aborting ..", new Object[] {
|
||||
HexString.toHexString(dpid),
|
||||
(activeMasterSwitches.get(dpid) == null) ? 'N' : 'Y',
|
||||
(activeEqualSwitches.get(dpid) == null) ? 'N' : 'Y'});
|
||||
counters.switchWithSameDpidActivated.updateCounterWithFlush();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a switch is activated, with this controller's role as MASTER.
|
||||
*/
|
||||
protected boolean addActivatedMasterSwitch(long dpid, IOFSwitch sw) {
|
||||
synchronized (multiCacheLock) {
|
||||
if (!validActivation(dpid)) {
|
||||
return false;
|
||||
}
|
||||
activeMasterSwitches.put(dpid, sw);
|
||||
}
|
||||
//update counters and events
|
||||
counters.switchActivated.updateCounterWithFlush();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a switch is activated, with this controller's role as EQUAL.
|
||||
*/
|
||||
protected boolean addActivatedEqualSwitch(long dpid, IOFSwitch sw) {
|
||||
synchronized (multiCacheLock) {
|
||||
if (!validActivation(dpid)) {
|
||||
return false;
|
||||
}
|
||||
activeEqualSwitches.put(dpid, sw);
|
||||
}
|
||||
//update counters and events
|
||||
counters.switchActivated.updateCounterWithFlush();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when this controller's role for a switch transitions from equal
|
||||
* to master. For 1.0 switches, we internally refer to the role 'slave' as
|
||||
* 'equal' - so this transition is equivalent to 'addActivatedMasterSwitch'.
|
||||
*/
|
||||
protected void transitionToMasterSwitch(long dpid) {
|
||||
synchronized (multiCacheLock) {
|
||||
IOFSwitch sw = activeEqualSwitches.remove(dpid);
|
||||
if (sw == null) {
|
||||
log.error("Transition to master called on sw {}, but switch "
|
||||
+ "was not found in controller-cache", dpid);
|
||||
return;
|
||||
}
|
||||
activeMasterSwitches.put(dpid, sw);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called when this controller's role for a switch transitions to equal.
|
||||
* For 1.0 switches, we internally refer to the role 'slave' as
|
||||
* 'equal'.
|
||||
*/
|
||||
protected void transitionToEqualSwitch(long dpid) {
|
||||
synchronized (multiCacheLock) {
|
||||
IOFSwitch sw = activeMasterSwitches.remove(dpid);
|
||||
if (sw == null) {
|
||||
log.error("Transition to equal called on sw {}, but switch "
|
||||
+ "was not found in controller-cache", dpid);
|
||||
return;
|
||||
}
|
||||
activeEqualSwitches.put(dpid, sw);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear all state in controller switch maps for a switch that has
|
||||
* disconnected from the local controller. Also release control for
|
||||
* that switch from the global repository. Notify switch listeners.
|
||||
*/
|
||||
protected void removeConnectedSwitch(long dpid) {
|
||||
releaseRegistryControl(dpid);
|
||||
connectedSwitches.remove(dpid);
|
||||
IOFSwitch sw = activeMasterSwitches.remove(dpid);
|
||||
if (sw == null) {
|
||||
sw = activeEqualSwitches.remove(dpid);
|
||||
}
|
||||
if (sw != null) {
|
||||
sw.cancelAllStatisticsReplies();
|
||||
sw.setConnected(false); // do we need this?
|
||||
}
|
||||
counters.switchDisconnected.updateCounterWithFlush();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates that ports on the given switch have changed. Enqueue a
|
||||
* switch update.
|
||||
* @param sw
|
||||
*/
|
||||
protected void notifyPortChanged(long dpid, OFPortDesc port,
|
||||
PortChangeType changeType) {
|
||||
if (port == null || changeType == null) {
|
||||
String msg = String.format("Switch port or changetType must not "
|
||||
+ "be null in port change notification");
|
||||
throw new NullPointerException(msg);
|
||||
}
|
||||
if (connectedSwitches.get(dpid) == null || getSwitch(dpid) == null) {
|
||||
log.warn("Port change update on switch {} not connected or activated "
|
||||
+ "... Aborting.", HexString.toHexString(dpid));
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// ***************
|
||||
// Getters/Setters
|
||||
// ***************
|
||||
|
||||
|
||||
public synchronized void setIOFSwitchManager(IOFSwitchManager swManager) {
|
||||
this.switchManager = swManager;
|
||||
this.registryService = swManager.getRegistry();
|
||||
}
|
||||
|
||||
|
||||
public void setDebugCounter(IDebugCounterService dcs) {
|
||||
this.debugCounters = dcs;
|
||||
}
|
||||
|
||||
IDebugCounterService getDebugCounter() {
|
||||
return this.debugCounters;
|
||||
}
|
||||
|
||||
// **********************
|
||||
// Role Handling
|
||||
// **********************
|
||||
|
||||
/**
|
||||
* created by ONOS - works with registry service.
|
||||
*/
|
||||
protected class RoleChangeCallback implements ControlChangeCallback {
|
||||
@Override
|
||||
public void controlChanged(long dpidLong, boolean hasControl) {
|
||||
Dpid dpid = new Dpid(dpidLong);
|
||||
log.info("Role change callback for switch {}, hasControl {}",
|
||||
dpid, hasControl);
|
||||
|
||||
Role role = null;
|
||||
|
||||
/*
|
||||
* issue #229
|
||||
* Cannot rely on sw.getRole() as it can be behind due to pending
|
||||
* role changes in the queue. Just submit it and late the
|
||||
* RoleChanger handle duplicates.
|
||||
*/
|
||||
|
||||
if (hasControl) {
|
||||
role = Role.MASTER;
|
||||
} else {
|
||||
role = Role.EQUAL; // treat the same as Role.SLAVE
|
||||
}
|
||||
|
||||
OFChannelHandler swCh = connectedSwitches.get(dpid.value());
|
||||
if (swCh == null) {
|
||||
log.warn("Switch {} not found in connected switches", dpid);
|
||||
return;
|
||||
}
|
||||
|
||||
log.debug("Sending role request {} msg to {}", role, dpid);
|
||||
swCh.sendRoleRequest(role, RoleRecvStatus.MATCHED_SET_ROLE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit request to the registry service for mastership of the
|
||||
* switch.
|
||||
* @param dpid this datapath to get role for
|
||||
*/
|
||||
public synchronized void submitRegistryRequest(long dpid) {
|
||||
if (registryService == null) {
|
||||
/*
|
||||
* If we have no registry then simply assign
|
||||
* mastership to this controller.
|
||||
*/
|
||||
new RoleChangeCallback().controlChanged(dpid, true);
|
||||
return;
|
||||
}
|
||||
OFChannelHandler h = connectedSwitches.get(dpid);
|
||||
if (h == null) {
|
||||
log.error("Trying to request registry control for switch {} "
|
||||
+ "not in connected switches. Aborting.. ",
|
||||
HexString.toHexString(dpid));
|
||||
connectedSwitches.get(dpid).disconnectSwitch();
|
||||
return;
|
||||
}
|
||||
//Request control of the switch from the global registry
|
||||
try {
|
||||
h.controlRequested = Boolean.TRUE;
|
||||
registryService.requestControl(dpid, new RoleChangeCallback());
|
||||
} catch (RegistryException e) {
|
||||
log.debug("Registry error: {}", e.getMessage());
|
||||
h.controlRequested = Boolean.FALSE;
|
||||
}
|
||||
if (!h.controlRequested) { // XXX what is being attempted here?
|
||||
// yield to allow other thread(s) to release control
|
||||
// TODO AAS: this is awful and needs to be fixed
|
||||
Thread.yield();
|
||||
// safer to bounce the switch to reconnect here than proceeding further
|
||||
// XXX S why? can't we just try again a little later?
|
||||
log.debug("Closing sw:{} because we weren't able to request control " +
|
||||
"successfully" + dpid);
|
||||
connectedSwitches.get(dpid).disconnectSwitch();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Relinquish role for the switch.
|
||||
* @param dpidLong the controlled datapath
|
||||
*/
|
||||
public synchronized void releaseRegistryControl(long dpidLong) {
|
||||
OFChannelHandler h = connectedSwitches.get(dpidLong);
|
||||
if (h == null) {
|
||||
log.error("Trying to release registry control for switch {} "
|
||||
+ "not in connected switches. Aborting.. ",
|
||||
HexString.toHexString(dpidLong));
|
||||
return;
|
||||
}
|
||||
if (registryService != null && h.controlRequested) {
|
||||
//TODO the above is not good for testing need to change controlrequest to method call.
|
||||
registryService.releaseControl(dpidLong);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// FIXME: remove this method
|
||||
public Map<Long, IOFSwitch> getSwitches() {
|
||||
return getMasterSwitches();
|
||||
}
|
||||
|
||||
// FIXME: remove this method
|
||||
public Map<Long, IOFSwitch> getMasterSwitches() {
|
||||
return Collections.unmodifiableMap(activeMasterSwitches);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public Set<Long> getAllSwitchDpids() {
|
||||
Set<Long> dpids = new HashSet<Long>();
|
||||
dpids.addAll(activeMasterSwitches.keySet());
|
||||
dpids.addAll(activeEqualSwitches.keySet());
|
||||
return dpids;
|
||||
}
|
||||
|
||||
|
||||
public Set<Long> getAllMasterSwitchDpids() {
|
||||
Set<Long> dpids = new HashSet<Long>();
|
||||
dpids.addAll(activeMasterSwitches.keySet());
|
||||
return dpids;
|
||||
}
|
||||
|
||||
|
||||
public Set<Long> getAllEqualSwitchDpids() {
|
||||
Set<Long> dpids = new HashSet<Long>();
|
||||
dpids.addAll(activeEqualSwitches.keySet());
|
||||
return dpids;
|
||||
}
|
||||
|
||||
|
||||
public IOFSwitch getSwitch(long dpid) {
|
||||
IOFSwitch sw = null;
|
||||
sw = activeMasterSwitches.get(dpid);
|
||||
if (sw != null) {
|
||||
return sw;
|
||||
}
|
||||
sw = activeEqualSwitches.get(dpid);
|
||||
if (sw != null) {
|
||||
return sw;
|
||||
}
|
||||
return sw;
|
||||
}
|
||||
|
||||
|
||||
public IOFSwitch getMasterSwitch(long dpid) {
|
||||
return activeMasterSwitches.get(dpid);
|
||||
}
|
||||
|
||||
|
||||
public IOFSwitch getEqualSwitch(long dpid) {
|
||||
return activeEqualSwitches.get(dpid);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public OFFactory getOFMessageFactory10() {
|
||||
return FACTORY10;
|
||||
}
|
||||
|
||||
|
||||
public OFFactory getOFMessageFactory13() {
|
||||
return FACTORY13;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public Map<String, String> getControllerNodeIPs() {
|
||||
// We return a copy of the mapping so we can guarantee that
|
||||
// the mapping return is the same as one that will be (or was)
|
||||
// dispatched to IHAListeners
|
||||
HashMap<String, String> retval = new HashMap<String, String>();
|
||||
synchronized (controllerNodeIPsCache) {
|
||||
retval.putAll(controllerNodeIPsCache);
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
public long getSystemStartTime() {
|
||||
return (this.systemStartTime);
|
||||
}
|
||||
|
||||
|
||||
public InstanceId getInstanceId() {
|
||||
return instanceId;
|
||||
}
|
||||
|
||||
|
||||
// **************
|
||||
// Initialization
|
||||
// **************
|
||||
|
||||
/**
|
||||
* Tell controller that we're ready to accept switches loop.
|
||||
*
|
||||
* @throws IOException
|
||||
*/
|
||||
@LogMessageDocs({
|
||||
@LogMessageDoc(message = "Listening for switch connections on {address}",
|
||||
explanation = "The controller is ready and listening for new" +
|
||||
" switch connections"),
|
||||
@LogMessageDoc(message = "Storage exception in controller " +
|
||||
"updates loop; terminating process",
|
||||
explanation = ERROR_DATABASE,
|
||||
recommendation = LogMessageDoc.CHECK_CONTROLLER),
|
||||
@LogMessageDoc(level = "ERROR",
|
||||
message = "Exception in controller updates loop",
|
||||
explanation = "Failed to dispatch controller event",
|
||||
recommendation = LogMessageDoc.GENERIC_ACTION)
|
||||
})
|
||||
public void run() {
|
||||
|
||||
try {
|
||||
final ServerBootstrap bootstrap = createServerBootStrap();
|
||||
|
||||
bootstrap.setOption("reuseAddr", true);
|
||||
bootstrap.setOption("child.keepAlive", true);
|
||||
bootstrap.setOption("child.tcpNoDelay", true);
|
||||
bootstrap.setOption("child.sendBufferSize", Controller.SEND_BUFFER_SIZE);
|
||||
|
||||
ChannelPipelineFactory pfact =
|
||||
new OpenflowPipelineFactory(this, null);
|
||||
bootstrap.setPipelineFactory(pfact);
|
||||
InetSocketAddress sa = new InetSocketAddress(openFlowPort);
|
||||
final ChannelGroup cg = new DefaultChannelGroup();
|
||||
cg.add(bootstrap.bind(sa));
|
||||
|
||||
log.info("Listening for switch connections on {}", sa);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private ServerBootstrap createServerBootStrap() {
|
||||
if (workerThreads == 0) {
|
||||
return new ServerBootstrap(
|
||||
new NioServerSocketChannelFactory(
|
||||
Executors.newCachedThreadPool(),
|
||||
Executors.newCachedThreadPool()));
|
||||
} else {
|
||||
return new ServerBootstrap(
|
||||
new NioServerSocketChannelFactory(
|
||||
Executors.newCachedThreadPool(),
|
||||
Executors.newCachedThreadPool(), workerThreads));
|
||||
}
|
||||
}
|
||||
|
||||
public void setConfigParams(Map<String, String> configParams) {
|
||||
String ofPort = configParams.get("openflowport");
|
||||
if (ofPort != null) {
|
||||
this.openFlowPort = Integer.parseInt(ofPort);
|
||||
}
|
||||
log.debug("OpenFlow port set to {}", this.openFlowPort);
|
||||
String threads = configParams.get("workerthreads");
|
||||
if (threads != null) {
|
||||
this.workerThreads = Integer.parseInt(threads);
|
||||
}
|
||||
log.debug("Number of worker threads set to {}", this.workerThreads);
|
||||
String controllerId = configParams.get("controllerid");
|
||||
if (controllerId != null) {
|
||||
this.instanceId = new InstanceId(controllerId);
|
||||
} else {
|
||||
//Try to get the hostname of the machine and use that for controller ID
|
||||
try {
|
||||
String hostname = java.net.InetAddress.getLocalHost().getHostName();
|
||||
this.instanceId = new InstanceId(hostname);
|
||||
} catch (UnknownHostException e) {
|
||||
log.warn("Can't get hostname, using the default");
|
||||
}
|
||||
}
|
||||
|
||||
log.debug("ControllerId set to {}", this.instanceId);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialize internal data structures.
|
||||
*/
|
||||
public void init(Map<String, String> configParams) {
|
||||
// These data structures are initialized here because other
|
||||
// module's startUp() might be called before ours
|
||||
this.activeMasterSwitches = new ConcurrentHashMap<Long, IOFSwitch>();
|
||||
this.activeEqualSwitches = new ConcurrentHashMap<Long, IOFSwitch>();
|
||||
this.connectedSwitches = new ConcurrentHashMap<Long, OFChannelHandler>();
|
||||
this.controllerNodeIPsCache = new HashMap<String, String>();
|
||||
|
||||
setConfigParams(configParams);
|
||||
this.systemStartTime = System.currentTimeMillis();
|
||||
this.setDebugCounter(new DebugCounter());
|
||||
this.counters = new Counters();
|
||||
this.multiCacheLock = new Object();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Startup all of the controller's components.
|
||||
*/
|
||||
@LogMessageDoc(message = "Waiting for storage source",
|
||||
explanation = "The system database is not yet ready",
|
||||
recommendation = "If this message persists, this indicates " +
|
||||
"that the system database has failed to start. " +
|
||||
LogMessageDoc.CHECK_CONTROLLER)
|
||||
public synchronized void startupComponents() {
|
||||
try {
|
||||
if (registryService != null) {
|
||||
registryService.registerController(instanceId.toString());
|
||||
}
|
||||
} catch (RegistryException e) {
|
||||
log.warn("Registry service error: {}", e.getMessage());
|
||||
}
|
||||
|
||||
// register counters and events
|
||||
try {
|
||||
this.counters.createCounters(debugCounters);
|
||||
} catch (CounterException e) {
|
||||
log.warn("Counters unavailable: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// **************
|
||||
// debugCounter registrations
|
||||
// **************
|
||||
|
||||
public static class Counters {
|
||||
public static final String PREFIX = "controller";
|
||||
public IDebugCounter switchActivated;
|
||||
public IDebugCounter switchWithSameDpidActivated; // warn
|
||||
public IDebugCounter switchDisconnected;
|
||||
public IDebugCounter messageReceived;
|
||||
public IDebugCounter switchDisconnectReadTimeout;
|
||||
public IDebugCounter switchDisconnectHandshakeTimeout;
|
||||
public IDebugCounter switchDisconnectIOError;
|
||||
public IDebugCounter switchDisconnectParseError;
|
||||
public IDebugCounter switchDisconnectSwitchStateException;
|
||||
public IDebugCounter rejectedExecutionException;
|
||||
public IDebugCounter switchDisconnectOtherException;
|
||||
public IDebugCounter switchConnected;
|
||||
public IDebugCounter unhandledMessage;
|
||||
public IDebugCounter packetInWhileSwitchIsSlave;
|
||||
public IDebugCounter epermErrorWhileSwitchIsMaster;
|
||||
public IDebugCounter roleReplyTimeout;
|
||||
public IDebugCounter roleReplyReceived; // expected RoleReply received
|
||||
public IDebugCounter roleReplyErrorUnsupported;
|
||||
public IDebugCounter switchCounterRegistrationFailed;
|
||||
|
||||
void createCounters(IDebugCounterService debugCounters) throws CounterException {
|
||||
|
||||
switchActivated =
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "switch-activated",
|
||||
"A switch connected to this controller is now " +
|
||||
"in MASTER role",
|
||||
CounterType.ALWAYS_COUNT);
|
||||
|
||||
switchWithSameDpidActivated = // warn
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "switch-with-same-dpid-activated",
|
||||
"A switch with the same DPID as another switch " +
|
||||
"connected to the controller. This can be " +
|
||||
"caused by multiple switches configured with " +
|
||||
"the same DPID or by a switch reconnecting very " +
|
||||
"quickly.",
|
||||
CounterType.COUNT_ON_DEMAND,
|
||||
IDebugCounterService.CTR_MDATA_WARN);
|
||||
|
||||
switchDisconnected =
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "switch-disconnected",
|
||||
"FIXME: switch has disconnected",
|
||||
CounterType.ALWAYS_COUNT);
|
||||
|
||||
//------------------------
|
||||
// channel handler counters. Factor them out ??
|
||||
messageReceived =
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "message-received",
|
||||
"Number of OpenFlow messages received. Some of " +
|
||||
"these might be throttled",
|
||||
CounterType.ALWAYS_COUNT);
|
||||
|
||||
switchDisconnectReadTimeout =
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "switch-disconnect-read-timeout",
|
||||
"Number of times a switch was disconnected due " +
|
||||
"due the switch failing to send OpenFlow " +
|
||||
"messages or responding to OpenFlow ECHOs",
|
||||
CounterType.ALWAYS_COUNT,
|
||||
IDebugCounterService.CTR_MDATA_ERROR);
|
||||
switchDisconnectHandshakeTimeout =
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "switch-disconnect-handshake-timeout",
|
||||
"Number of times a switch was disconnected " +
|
||||
"because it failed to complete the handshake " +
|
||||
"in time.",
|
||||
CounterType.ALWAYS_COUNT,
|
||||
IDebugCounterService.CTR_MDATA_ERROR);
|
||||
switchDisconnectIOError =
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "switch-disconnect-io-error",
|
||||
"Number of times a switch was disconnected " +
|
||||
"due to IO errors on the switch connection.",
|
||||
CounterType.ALWAYS_COUNT,
|
||||
IDebugCounterService.CTR_MDATA_ERROR);
|
||||
switchDisconnectParseError =
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "switch-disconnect-parse-error",
|
||||
"Number of times a switch was disconnected " +
|
||||
"because it sent an invalid packet that could " +
|
||||
"not be parsed",
|
||||
CounterType.ALWAYS_COUNT,
|
||||
IDebugCounterService.CTR_MDATA_ERROR);
|
||||
|
||||
switchDisconnectSwitchStateException =
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "switch-disconnect-switch-state-exception",
|
||||
"Number of times a switch was disconnected " +
|
||||
"because it sent messages that were invalid " +
|
||||
"given the switch connection's state.",
|
||||
CounterType.ALWAYS_COUNT,
|
||||
IDebugCounterService.CTR_MDATA_ERROR);
|
||||
rejectedExecutionException =
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "rejected-execution-exception",
|
||||
"TODO",
|
||||
CounterType.ALWAYS_COUNT,
|
||||
IDebugCounterService.CTR_MDATA_ERROR);
|
||||
|
||||
switchDisconnectOtherException =
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "switch-disconnect-other-exception",
|
||||
"Number of times a switch was disconnected " +
|
||||
"due to an exceptional situation not covered " +
|
||||
"by other counters",
|
||||
CounterType.ALWAYS_COUNT,
|
||||
IDebugCounterService.CTR_MDATA_ERROR);
|
||||
|
||||
switchConnected =
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "switch-connected",
|
||||
"Number of times a new switch connection was " +
|
||||
"established",
|
||||
CounterType.ALWAYS_COUNT);
|
||||
|
||||
unhandledMessage =
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "unhandled-message",
|
||||
"Number of times an OpenFlow message was " +
|
||||
"received that the controller ignored because " +
|
||||
"it was inapproriate given the switch " +
|
||||
"connection's state.",
|
||||
CounterType.ALWAYS_COUNT,
|
||||
IDebugCounterService.CTR_MDATA_WARN);
|
||||
// might be less than warning
|
||||
|
||||
packetInWhileSwitchIsSlave =
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "packet-in-while-switch-is-slave",
|
||||
"Number of times a packet in was received " +
|
||||
"from a switch that was in SLAVE role. " +
|
||||
"Possibly inidicates inconsistent roles.",
|
||||
CounterType.ALWAYS_COUNT);
|
||||
epermErrorWhileSwitchIsMaster =
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "eperm-error-while-switch-is-master",
|
||||
"Number of times a permission error was " +
|
||||
"received while the switch was in MASTER role. " +
|
||||
"Possibly inidicates inconsistent roles.",
|
||||
CounterType.ALWAYS_COUNT,
|
||||
IDebugCounterService.CTR_MDATA_WARN);
|
||||
|
||||
roleReplyTimeout =
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "role-reply-timeout",
|
||||
"Number of times a role request message did not " +
|
||||
"receive the expected reply from a switch",
|
||||
CounterType.ALWAYS_COUNT,
|
||||
IDebugCounterService.CTR_MDATA_WARN);
|
||||
|
||||
roleReplyReceived = // expected RoleReply received
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "role-reply-received",
|
||||
"Number of times the controller received the " +
|
||||
"expected role reply message from a switch",
|
||||
CounterType.ALWAYS_COUNT);
|
||||
|
||||
roleReplyErrorUnsupported =
|
||||
debugCounters.registerCounter(
|
||||
PREFIX, "role-reply-error-unsupported",
|
||||
"Number of times the controller received an " +
|
||||
"error from a switch in response to a role " +
|
||||
"request indicating that the switch does not " +
|
||||
"support roles.",
|
||||
CounterType.ALWAYS_COUNT);
|
||||
|
||||
switchCounterRegistrationFailed =
|
||||
debugCounters.registerCounter(PREFIX,
|
||||
"switch-counter-registration-failed",
|
||||
"Number of times the controller failed to " +
|
||||
"register per-switch debug counters",
|
||||
CounterType.ALWAYS_COUNT,
|
||||
IDebugCounterService.CTR_MDATA_WARN);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public Counters getCounters() {
|
||||
return this.counters;
|
||||
}
|
||||
|
||||
|
||||
// **************
|
||||
// Utility methods
|
||||
// **************
|
||||
|
||||
public Map<String, Long> getMemory() {
|
||||
Map<String, Long> m = new HashMap<String, Long>();
|
||||
Runtime runtime = Runtime.getRuntime();
|
||||
m.put("total", runtime.totalMemory());
|
||||
m.put("free", runtime.freeMemory());
|
||||
return m;
|
||||
}
|
||||
|
||||
|
||||
public Long getUptime() {
|
||||
RuntimeMXBean rb = ManagementFactory.getRuntimeMXBean();
|
||||
return rb.getUptime();
|
||||
}
|
||||
|
||||
/**
|
||||
* Forward to the driver-manager to get an IOFSwitch instance.
|
||||
* @param desc
|
||||
* @return
|
||||
*/
|
||||
protected IOFSwitch getOFSwitchInstance(OFDescStatsReply desc, OFVersion ofv) {
|
||||
if (switchManager == null) {
|
||||
return new DummySwitchForTesting();
|
||||
}
|
||||
return switchManager.getSwitchImpl(desc.getMfrDesc(), desc.getHwDesc(),
|
||||
desc.getSwDesc(), ofv);
|
||||
}
|
||||
|
||||
@Activate
|
||||
public void activate() {
|
||||
log.info("Initialising OpenFlow Lib and IO");
|
||||
this.init(new HashMap<String, String>());
|
||||
this.startupComponents();
|
||||
this.run();
|
||||
}
|
||||
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
/**
|
||||
* Copyright 2011, Big Switch Networks, Inc.
|
||||
* Originally created by David Erickson, Stanford University
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License. You may obtain
|
||||
* a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
**/
|
||||
|
||||
package org.onlab.onos.of.controller.impl.internal;
|
||||
|
||||
/**
|
||||
* Exception is thrown when the handshake fails to complete.
|
||||
* before a specified time
|
||||
*
|
||||
*/
|
||||
public class HandshakeTimeoutException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = 6859880268940337312L;
|
||||
|
||||
}
|
@ -1,94 +0,0 @@
|
||||
/**
|
||||
* Copyright 2011, Big Switch Networks, Inc.
|
||||
* Originally created by David Erickson, Stanford University
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License. You may obtain
|
||||
* a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
**/
|
||||
|
||||
package org.onlab.onos.of.controller.impl.internal;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.jboss.netty.channel.ChannelHandlerContext;
|
||||
import org.jboss.netty.channel.ChannelStateEvent;
|
||||
import org.jboss.netty.channel.Channels;
|
||||
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
|
||||
import org.jboss.netty.util.Timeout;
|
||||
import org.jboss.netty.util.Timer;
|
||||
import org.jboss.netty.util.TimerTask;
|
||||
|
||||
/**
|
||||
* Trigger a timeout if a switch fails to complete handshake soon enough.
|
||||
*/
|
||||
public class HandshakeTimeoutHandler
|
||||
extends SimpleChannelUpstreamHandler {
|
||||
static final HandshakeTimeoutException EXCEPTION =
|
||||
new HandshakeTimeoutException();
|
||||
|
||||
final OFChannelHandler channelHandler;
|
||||
final Timer timer;
|
||||
final long timeoutNanos;
|
||||
volatile Timeout timeout;
|
||||
|
||||
public HandshakeTimeoutHandler(OFChannelHandler channelHandler,
|
||||
Timer timer,
|
||||
long timeoutSeconds) {
|
||||
super();
|
||||
this.channelHandler = channelHandler;
|
||||
this.timer = timer;
|
||||
this.timeoutNanos = TimeUnit.SECONDS.toNanos(timeoutSeconds);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e)
|
||||
throws Exception {
|
||||
if (timeoutNanos > 0) {
|
||||
timeout = timer.newTimeout(new HandshakeTimeoutTask(ctx),
|
||||
timeoutNanos, TimeUnit.NANOSECONDS);
|
||||
}
|
||||
ctx.sendUpstream(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e)
|
||||
throws Exception {
|
||||
if (timeout != null) {
|
||||
timeout.cancel();
|
||||
timeout = null;
|
||||
}
|
||||
}
|
||||
|
||||
private final class HandshakeTimeoutTask implements TimerTask {
|
||||
|
||||
private final ChannelHandlerContext ctx;
|
||||
|
||||
HandshakeTimeoutTask(ChannelHandlerContext ctx) {
|
||||
this.ctx = ctx;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(Timeout t) throws Exception {
|
||||
if (t.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ctx.getChannel().isOpen()) {
|
||||
return;
|
||||
}
|
||||
if (!channelHandler.isHandshakeComplete()) {
|
||||
Channels.fireExceptionCaught(ctx, EXCEPTION);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,56 +0,0 @@
|
||||
/**
|
||||
* Copyright 2011, Big Switch Networks, Inc.
|
||||
* Originally created by David Erickson, Stanford University
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License. You may obtain
|
||||
* a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
**/
|
||||
|
||||
package org.onlab.onos.of.controller.impl.internal;
|
||||
|
||||
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
import org.jboss.netty.channel.Channel;
|
||||
import org.jboss.netty.channel.ChannelHandlerContext;
|
||||
import org.jboss.netty.handler.codec.frame.FrameDecoder;
|
||||
import org.projectfloodlight.openflow.protocol.OFFactories;
|
||||
import org.projectfloodlight.openflow.protocol.OFMessage;
|
||||
import org.projectfloodlight.openflow.protocol.OFMessageReader;
|
||||
|
||||
/**
|
||||
* Decode an openflow message from a Channel, for use in a netty pipeline.
|
||||
*/
|
||||
public class OFMessageDecoder extends FrameDecoder {
|
||||
|
||||
@Override
|
||||
protected Object decode(ChannelHandlerContext ctx, Channel channel,
|
||||
ChannelBuffer buffer) throws Exception {
|
||||
if (!channel.isConnected()) {
|
||||
// In testing, I see decode being called AFTER decode last.
|
||||
// This check avoids that from reading corrupted frames
|
||||
return null;
|
||||
}
|
||||
|
||||
// Note that a single call to decode results in reading a single
|
||||
// OFMessage from the channel buffer, which is passed on to, and processed
|
||||
// by, the controller (in OFChannelHandler).
|
||||
// This is different from earlier behavior (with the original openflowj),
|
||||
// where we parsed all the messages in the buffer, before passing on
|
||||
// a list of the parsed messages to the controller.
|
||||
// The performance *may or may not* not be as good as before.
|
||||
OFMessageReader<OFMessage> reader = OFFactories.getGenericReader();
|
||||
OFMessage message = reader.readFrom(buffer);
|
||||
|
||||
return message;
|
||||
}
|
||||
|
||||
}
|
@ -1,59 +0,0 @@
|
||||
/**
|
||||
* Copyright 2011, Big Switch Networks, Inc.
|
||||
* Originally created by David Erickson, Stanford University
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License. You may obtain
|
||||
* a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
**/
|
||||
|
||||
package org.onlab.onos.of.controller.impl.internal;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
import org.jboss.netty.buffer.ChannelBuffers;
|
||||
import org.jboss.netty.channel.Channel;
|
||||
import org.jboss.netty.channel.ChannelHandlerContext;
|
||||
import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
|
||||
import org.projectfloodlight.openflow.protocol.OFMessage;
|
||||
|
||||
|
||||
/**
|
||||
* Encode an openflow message for output into a ChannelBuffer, for use in a
|
||||
* netty pipeline.
|
||||
*/
|
||||
public class OFMessageEncoder extends OneToOneEncoder {
|
||||
|
||||
@Override
|
||||
protected Object encode(ChannelHandlerContext ctx, Channel channel,
|
||||
Object msg) throws Exception {
|
||||
if (!(msg instanceof List)) {
|
||||
return msg;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<OFMessage> msglist = (List<OFMessage>) msg;
|
||||
/* XXX S can't get length of OFMessage in loxigen's openflowj??
|
||||
int size = 0;
|
||||
for (OFMessage ofm : msglist) {
|
||||
size += ofm.getLengthU();
|
||||
}*/
|
||||
|
||||
ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
|
||||
|
||||
for (OFMessage ofm : msglist) {
|
||||
ofm.writeTo(buf);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
}
|
@ -1,78 +0,0 @@
|
||||
/**
|
||||
* Copyright 2011, Big Switch Networks, Inc.
|
||||
* Originally created by David Erickson, Stanford University
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License. You may obtain
|
||||
* a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
**/
|
||||
|
||||
package org.onlab.onos.of.controller.impl.internal;
|
||||
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
|
||||
import org.jboss.netty.channel.ChannelPipeline;
|
||||
import org.jboss.netty.channel.ChannelPipelineFactory;
|
||||
import org.jboss.netty.channel.Channels;
|
||||
import org.jboss.netty.handler.execution.ExecutionHandler;
|
||||
import org.jboss.netty.handler.timeout.IdleStateHandler;
|
||||
import org.jboss.netty.handler.timeout.ReadTimeoutHandler;
|
||||
import org.jboss.netty.util.ExternalResourceReleasable;
|
||||
import org.jboss.netty.util.HashedWheelTimer;
|
||||
import org.jboss.netty.util.Timer;
|
||||
|
||||
/**
|
||||
* Creates a ChannelPipeline for a server-side openflow channel.
|
||||
*/
|
||||
public class OpenflowPipelineFactory
|
||||
implements ChannelPipelineFactory, ExternalResourceReleasable {
|
||||
|
||||
protected Controller controller;
|
||||
protected ThreadPoolExecutor pipelineExecutor;
|
||||
protected Timer timer;
|
||||
protected IdleStateHandler idleHandler;
|
||||
protected ReadTimeoutHandler readTimeoutHandler;
|
||||
|
||||
public OpenflowPipelineFactory(Controller controller,
|
||||
ThreadPoolExecutor pipelineExecutor) {
|
||||
super();
|
||||
this.controller = controller;
|
||||
this.pipelineExecutor = pipelineExecutor;
|
||||
this.timer = new HashedWheelTimer();
|
||||
this.idleHandler = new IdleStateHandler(timer, 20, 25, 0);
|
||||
this.readTimeoutHandler = new ReadTimeoutHandler(timer, 30);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelPipeline getPipeline() throws Exception {
|
||||
OFChannelHandler handler = new OFChannelHandler(controller);
|
||||
|
||||
ChannelPipeline pipeline = Channels.pipeline();
|
||||
pipeline.addLast("ofmessagedecoder", new OFMessageDecoder());
|
||||
pipeline.addLast("ofmessageencoder", new OFMessageEncoder());
|
||||
pipeline.addLast("idle", idleHandler);
|
||||
pipeline.addLast("timeout", readTimeoutHandler);
|
||||
// XXX S ONOS: was 15 increased it to fix Issue #296
|
||||
pipeline.addLast("handshaketimeout",
|
||||
new HandshakeTimeoutHandler(handler, timer, 60));
|
||||
if (pipelineExecutor != null) {
|
||||
pipeline.addLast("pipelineExecutor",
|
||||
new ExecutionHandler(pipelineExecutor));
|
||||
}
|
||||
pipeline.addLast("handler", handler);
|
||||
return pipeline;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void releaseExternalResources() {
|
||||
timer.stop();
|
||||
}
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.internal;
|
||||
|
||||
/**
|
||||
* Thrown when IOFSwitch.startDriverHandshake() is called more than once.
|
||||
*
|
||||
*/
|
||||
public class SwitchDriverSubHandshakeAlreadyStarted extends
|
||||
SwitchDriverSubHandshakeException {
|
||||
private static final long serialVersionUID = -5491845708752443501L;
|
||||
|
||||
public SwitchDriverSubHandshakeAlreadyStarted() {
|
||||
super();
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.internal;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.OFMessage;
|
||||
|
||||
|
||||
/**
|
||||
* Indicates that a message was passed to a switch driver's subhandshake
|
||||
* handling code but the driver has already completed the sub-handshake.
|
||||
*
|
||||
*/
|
||||
public class SwitchDriverSubHandshakeCompleted
|
||||
extends SwitchDriverSubHandshakeException {
|
||||
private static final long serialVersionUID = -8817822245846375995L;
|
||||
|
||||
public SwitchDriverSubHandshakeCompleted(OFMessage m) {
|
||||
super("Sub-Handshake is already complete but received message "
|
||||
+ m.getType());
|
||||
}
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.internal;
|
||||
|
||||
/**
|
||||
* Base class for exception thrown by switch driver sub-handshake processing.
|
||||
*
|
||||
*/
|
||||
public class SwitchDriverSubHandshakeException extends RuntimeException {
|
||||
private static final long serialVersionUID = -6257836781419604438L;
|
||||
|
||||
protected SwitchDriverSubHandshakeException() {
|
||||
super();
|
||||
}
|
||||
|
||||
protected SwitchDriverSubHandshakeException(String arg0, Throwable arg1) {
|
||||
super(arg0, arg1);
|
||||
}
|
||||
|
||||
protected SwitchDriverSubHandshakeException(String arg0) {
|
||||
super(arg0);
|
||||
}
|
||||
|
||||
protected SwitchDriverSubHandshakeException(Throwable arg0) {
|
||||
super(arg0);
|
||||
}
|
||||
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.internal;
|
||||
|
||||
/**
|
||||
* Thrown when a switch driver's sub-handshake has not been started but an
|
||||
* operation requiring the sub-handshake has been attempted.
|
||||
*
|
||||
*/
|
||||
public class SwitchDriverSubHandshakeNotStarted extends
|
||||
SwitchDriverSubHandshakeException {
|
||||
private static final long serialVersionUID = -5491845708752443501L;
|
||||
|
||||
public SwitchDriverSubHandshakeNotStarted() {
|
||||
super();
|
||||
}
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.internal;
|
||||
|
||||
/**
|
||||
* Thrown when a switch driver's sub-handshake state-machine receives an
|
||||
* unexpected OFMessage and/or is in an invald state.
|
||||
*
|
||||
*/
|
||||
public class SwitchDriverSubHandshakeStateException extends
|
||||
SwitchDriverSubHandshakeException {
|
||||
private static final long serialVersionUID = -8249926069195147051L;
|
||||
|
||||
public SwitchDriverSubHandshakeStateException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
/**
|
||||
* Copyright 2011, Big Switch Networks, Inc.
|
||||
* Originally created by David Erickson, Stanford University
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License. You may obtain
|
||||
* a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
**/
|
||||
|
||||
package org.onlab.onos.of.controller.impl.internal;
|
||||
|
||||
/**
|
||||
* This exception indicates an error or unexpected message during
|
||||
* message handling. E.g., if an OFMessage is received that is illegal or
|
||||
* unexpected given the current handshake state.
|
||||
*
|
||||
* We don't allow wrapping other exception in a switch state exception. We
|
||||
* only log the SwitchStateExceptions message so the causing exceptions
|
||||
* stack trace is generally not available.
|
||||
*
|
||||
*/
|
||||
public class SwitchStateException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = 9153954512470002631L;
|
||||
|
||||
public SwitchStateException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public SwitchStateException(String arg0, Throwable arg1) {
|
||||
super(arg0, arg1);
|
||||
}
|
||||
|
||||
public SwitchStateException(String arg0) {
|
||||
super(arg0);
|
||||
}
|
||||
|
||||
public SwitchStateException(Throwable arg0) {
|
||||
super(arg0);
|
||||
}
|
||||
|
||||
}
|
@ -1,66 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.registry;
|
||||
|
||||
|
||||
|
||||
public class ControllerRegistryEntry implements Comparable<ControllerRegistryEntry> {
|
||||
//
|
||||
// TODO: Refactor the implementation and decide whether controllerId
|
||||
// is needed. If "yes", we might need to consider it inside the
|
||||
// compareTo(), equals() and hashCode() implementations.
|
||||
//
|
||||
private final String controllerId;
|
||||
private final int sequenceNumber;
|
||||
|
||||
public ControllerRegistryEntry(String controllerId, int sequenceNumber) {
|
||||
this.controllerId = controllerId;
|
||||
this.sequenceNumber = sequenceNumber;
|
||||
}
|
||||
|
||||
public String getControllerId() {
|
||||
return controllerId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares this object with the specified object for order.
|
||||
* NOTE: the test is based on ControllerRegistryEntry sequence numbers,
|
||||
* and doesn't include the controllerId.
|
||||
*
|
||||
* @param o the object to be compared.
|
||||
* @return a negative integer, zero, or a positive integer as this object
|
||||
* is less than, equal to, or greater than the specified object.
|
||||
*/
|
||||
@Override
|
||||
public int compareTo(ControllerRegistryEntry o) {
|
||||
return this.sequenceNumber - o.sequenceNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test whether some other object is "equal to" this one.
|
||||
* NOTE: the test is based on ControllerRegistryEntry sequence numbers,
|
||||
* and doesn't include the controllerId.
|
||||
*
|
||||
* @param obj the reference object with which to compare.
|
||||
* @return true if this object is the same as the obj argument; false
|
||||
* otherwise.
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof ControllerRegistryEntry) {
|
||||
ControllerRegistryEntry other = (ControllerRegistryEntry) obj;
|
||||
return this.sequenceNumber == other.sequenceNumber;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the hash code for the object.
|
||||
* NOTE: the computation is based on ControllerRegistryEntry sequence
|
||||
* numbers, and doesn't include the controller ID.
|
||||
*
|
||||
* @return a hash code value for this object.
|
||||
*/
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Integer.valueOf(this.sequenceNumber).hashCode();
|
||||
}
|
||||
}
|
@ -1,155 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.registry;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.onlab.onos.of.controller.impl.util.InstanceId;
|
||||
|
||||
/**
|
||||
* A registry service that allows ONOS to register controllers and switches in a
|
||||
* way that is global to the entire ONOS cluster. The registry is the arbiter
|
||||
* for allowing controllers to control switches.
|
||||
* <p/>
|
||||
* The OVS/OF1.{2,3} fault tolerance model is a switch connects to multiple
|
||||
* controllers, and the controllers send role requests to tell the switch their
|
||||
* role in controlling the switch.
|
||||
* <p/>
|
||||
* The ONOS fault tolerance model allows only a single controller to have
|
||||
* control of a switch (MASTER role) at once. Controllers therefore need a
|
||||
* mechanism that enables them to decide who should control a each switch. The
|
||||
* registry service provides this mechanism.
|
||||
*/
|
||||
public interface IControllerRegistry {
|
||||
|
||||
/**
|
||||
* Callback interface for control change events.
|
||||
*/
|
||||
public interface ControlChangeCallback {
|
||||
/**
|
||||
* Called whenever the control changes from the point of view of the
|
||||
* registry. The callee can check whether they have control or not using
|
||||
* the hasControl parameter.
|
||||
*
|
||||
* @param dpid The switch that control has changed for
|
||||
* @param hasControl Whether the listener now has control or not
|
||||
*/
|
||||
void controlChanged(long dpid, boolean hasControl);
|
||||
}
|
||||
|
||||
/**
|
||||
* Request for control of a switch. This method does not block. When control
|
||||
* for a switch changes, the controlChanged method on the callback object
|
||||
* will be called. This happens any time the control changes while the
|
||||
* request is still active (until releaseControl is called)
|
||||
*
|
||||
* @param dpid Switch to request control for
|
||||
* @param cb Callback that will be used to notify caller of control changes
|
||||
* @throws RegistryException Errors contacting the registry service
|
||||
*/
|
||||
public void requestControl(long dpid, ControlChangeCallback cb)
|
||||
throws RegistryException;
|
||||
|
||||
/**
|
||||
* Stop trying to take control of a switch. This removes the entry for this
|
||||
* controller requesting this switch in the registry. If the controller had
|
||||
* control when this is called, another controller will now gain control of
|
||||
* the switch. This call doesn't block.
|
||||
*
|
||||
* @param dpid Switch to release control of
|
||||
*/
|
||||
public void releaseControl(long dpid);
|
||||
|
||||
/**
|
||||
* Check whether the controller has control of the switch This call doesn't
|
||||
* block.
|
||||
*
|
||||
* @param dpid Switch to check control of
|
||||
* @return true if controller has control of the switch.
|
||||
*/
|
||||
public boolean hasControl(long dpid);
|
||||
|
||||
/**
|
||||
* Check whether this instance is the leader for the cluster. This call
|
||||
* doesn't block.
|
||||
*
|
||||
* @return true if the instance is the leader for the cluster, otherwise
|
||||
* false.
|
||||
*/
|
||||
public boolean isClusterLeader();
|
||||
|
||||
/**
|
||||
* Gets the unique ID used to identify this ONOS instance in the cluster.
|
||||
*
|
||||
* @return Instance ID.
|
||||
*/
|
||||
public InstanceId getOnosInstanceId();
|
||||
|
||||
/**
|
||||
* Register a controller to the ONOS cluster. Must be called before the
|
||||
* registry can be used to take control of any switches.
|
||||
*
|
||||
* @param controllerId A unique string ID identifying this controller in the
|
||||
* cluster
|
||||
* @throws RegistryException for errors connecting to registry service,
|
||||
* controllerId already registered
|
||||
*/
|
||||
public void registerController(String controllerId)
|
||||
throws RegistryException;
|
||||
|
||||
/**
|
||||
* Get all controllers in the cluster.
|
||||
*
|
||||
* @return Collection of controller IDs
|
||||
* @throws RegistryException on error
|
||||
*/
|
||||
public Collection<String> getAllControllers() throws RegistryException;
|
||||
|
||||
/**
|
||||
* Get all switches in the cluster, along with which controller is in
|
||||
* control of them (if any) and any other controllers that have requested
|
||||
* control.
|
||||
*
|
||||
* @return Map of all switches.
|
||||
*/
|
||||
public Map<String, List<ControllerRegistryEntry>> getAllSwitches();
|
||||
|
||||
/**
|
||||
* Get the controller that has control of a given switch.
|
||||
*
|
||||
* @param dpid Switch to find controller for
|
||||
* @return controller ID
|
||||
* @throws RegistryException Errors contacting registry service
|
||||
*/
|
||||
public String getControllerForSwitch(long dpid) throws RegistryException;
|
||||
|
||||
/**
|
||||
* Get all switches controlled by a given controller.
|
||||
*
|
||||
* @param controllerId ID of the controller
|
||||
* @return Collection of dpids
|
||||
*/
|
||||
public Collection<Long> getSwitchesControlledByController(String controllerId);
|
||||
|
||||
/**
|
||||
* Get a unique Id Block.
|
||||
*
|
||||
* @return Id Block.
|
||||
*/
|
||||
public IdBlock allocateUniqueIdBlock();
|
||||
|
||||
/**
|
||||
* Get next unique id and retrieve a new range of ids if needed.
|
||||
*
|
||||
* @param range range to use for the identifier
|
||||
* @return Id Block.
|
||||
*/
|
||||
public IdBlock allocateUniqueIdBlock(long range);
|
||||
|
||||
/**
|
||||
* Get a globally unique ID.
|
||||
*
|
||||
* @return a globally unique ID.
|
||||
*/
|
||||
public long getNextUniqueId();
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.registry;
|
||||
|
||||
public class IdBlock {
|
||||
private final long start;
|
||||
private final long end;
|
||||
private final long size;
|
||||
|
||||
public IdBlock(long start, long end, long size) {
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
public long getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
public long getEnd() {
|
||||
return end;
|
||||
}
|
||||
|
||||
public long getSize() {
|
||||
return size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "IdBlock [start=" + start + ", end=" + end + ", size=" + size
|
||||
+ "]";
|
||||
}
|
||||
}
|
||||
|
@ -1,15 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.registry;
|
||||
|
||||
public class RegistryException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = -8276300722010217913L;
|
||||
|
||||
public RegistryException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public RegistryException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
}
|
@ -1,74 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.util;
|
||||
|
||||
import org.projectfloodlight.openflow.util.HexString;
|
||||
|
||||
/**
|
||||
* The class representing a network switch DPID.
|
||||
* This class is immutable.
|
||||
*/
|
||||
public final class Dpid {
|
||||
private static final long UNKNOWN = 0;
|
||||
private final long value;
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
public Dpid() {
|
||||
this.value = Dpid.UNKNOWN;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor from a long value.
|
||||
*
|
||||
* @param value the value to use.
|
||||
*/
|
||||
public Dpid(long value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor from a string.
|
||||
*
|
||||
* @param value the value to use.
|
||||
*/
|
||||
public Dpid(String value) {
|
||||
this.value = HexString.toLong(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of the DPID.
|
||||
*
|
||||
* @return the value of the DPID.
|
||||
*/
|
||||
public long value() {
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the DPID value to a ':' separated hexadecimal string.
|
||||
*
|
||||
* @return the DPID value as a ':' separated hexadecimal string.
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return HexString.toHexString(this.value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
if (!(other instanceof Dpid)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Dpid otherDpid = (Dpid) other;
|
||||
|
||||
return value == otherDpid.value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 17;
|
||||
hash += 31 * hash + (int) (value ^ value >>> 32);
|
||||
return hash;
|
||||
}
|
||||
}
|
@ -1,360 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.util;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
import org.jboss.netty.channel.Channel;
|
||||
import org.projectfloodlight.openflow.protocol.OFActionType;
|
||||
import org.projectfloodlight.openflow.protocol.OFCapabilities;
|
||||
import org.projectfloodlight.openflow.protocol.OFDescStatsReply;
|
||||
import org.projectfloodlight.openflow.protocol.OFFeaturesReply;
|
||||
import org.projectfloodlight.openflow.protocol.OFMessage;
|
||||
import org.projectfloodlight.openflow.protocol.OFPortDesc;
|
||||
import org.projectfloodlight.openflow.protocol.OFPortDescStatsReply;
|
||||
import org.projectfloodlight.openflow.protocol.OFPortStatus;
|
||||
import org.projectfloodlight.openflow.protocol.OFStatsReply;
|
||||
import org.projectfloodlight.openflow.protocol.OFStatsRequest;
|
||||
import org.projectfloodlight.openflow.protocol.OFVersion;
|
||||
import org.projectfloodlight.openflow.types.DatapathId;
|
||||
import org.projectfloodlight.openflow.types.U64;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import net.onrc.onos.of.ctl.IOFSwitch;
|
||||
import net.onrc.onos.of.ctl.Role;
|
||||
import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService;
|
||||
import org.onlab.onos.of.controller.impl.debugcounter.IDebugCounterService.CounterException;
|
||||
|
||||
public class DummySwitchForTesting implements IOFSwitch {
|
||||
|
||||
protected static final Logger log = LoggerFactory.getLogger(DummySwitchForTesting.class);
|
||||
|
||||
private Channel channel;
|
||||
private boolean connected = false;
|
||||
private OFVersion ofv = OFVersion.OF_10;
|
||||
|
||||
private Collection<OFPortDesc> ports;
|
||||
|
||||
private DatapathId datapathId;
|
||||
|
||||
private Set<OFCapabilities> capabilities;
|
||||
|
||||
private int buffers;
|
||||
|
||||
private byte tables;
|
||||
|
||||
private String stringId;
|
||||
|
||||
private Role role;
|
||||
|
||||
@Override
|
||||
public void disconnectSwitch() {
|
||||
this.channel.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(OFMessage m) throws IOException {
|
||||
this.channel.write(m);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(List<OFMessage> msglist) throws IOException {
|
||||
for (OFMessage m : msglist) {
|
||||
this.channel.write(m);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Date getConnectedSince() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNextTransactionId() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isConnected() {
|
||||
return this.connected;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setConnected(boolean connected) {
|
||||
this.connected = connected;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void flush() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChannel(Channel channel) {
|
||||
this.channel = channel;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getId() {
|
||||
if (this.stringId == null) {
|
||||
throw new RuntimeException("Features reply has not yet been set");
|
||||
}
|
||||
return this.datapathId.getLong();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStringId() {
|
||||
// TODO Auto-generated method stub
|
||||
return "DummySwitch";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNumBuffers() {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<OFCapabilities> getCapabilities() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte getNumTables() {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OFDescStatsReply getSwitchDescription() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancelFeaturesReply(int transactionId) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<OFActionType> getActions() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOFVersion(OFVersion version) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public OFVersion getOFVersion() {
|
||||
return this.ofv;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<OFPortDesc> getEnabledPorts() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Integer> getEnabledPortNumbers() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OFPortDesc getPort(int portNumber) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OFPortDesc getPort(String portName) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderedCollection<PortChangeEvent> processOFPortStatus(
|
||||
OFPortStatus ps) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<OFPortDesc> getPorts() {
|
||||
return ports;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean portEnabled(int portName) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderedCollection<PortChangeEvent> setPorts(
|
||||
Collection<OFPortDesc> p) {
|
||||
this.ports = p;
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Object, Object> getAttributes() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasAttribute(String name) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getAttribute(String name) {
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAttribute(String name, Object value) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object removeAttribute(String name) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deliverStatisticsReply(OFMessage reply) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancelStatisticsReply(int transactionId) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancelAllStatisticsReplies() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Future<List<OFStatsReply>> getStatistics(OFStatsRequest<?> request)
|
||||
throws IOException {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearAllFlowMods() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Role getRole() {
|
||||
return this.role;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRole(Role role) {
|
||||
this.role = role;
|
||||
}
|
||||
|
||||
@Override
|
||||
public U64 getNextGenerationId() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDebugCounterService(IDebugCounterService debugCounter)
|
||||
throws CounterException {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startDriverHandshake() throws IOException {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDriverHandshakeComplete() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processDriverHandshakeMessage(OFMessage m) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTableFull(boolean isFull) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFeaturesReply(OFFeaturesReply featuresReply) {
|
||||
if (featuresReply == null) {
|
||||
log.error("Error setting featuresReply for switch: {}", getStringId());
|
||||
return;
|
||||
}
|
||||
this.datapathId = featuresReply.getDatapathId();
|
||||
this.capabilities = featuresReply.getCapabilities();
|
||||
this.buffers = (int) featuresReply.getNBuffers();
|
||||
this.tables = (byte) featuresReply.getNTables();
|
||||
this.stringId = this.datapathId.toString();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPortDescReply(OFPortDescStatsReply portDescReply) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleMessage(OFMessage m) {
|
||||
log.info("Got packet {} but I am dumb so I don't know what to do.", m);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean portEnabled(String portName) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderedCollection<PortChangeEvent> comparePorts(
|
||||
Collection<OFPortDesc> p) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@ -1,149 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.util;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* A utility class to convert between integer based bitmaps for (OpenFlow)
|
||||
* flags and Enum and EnumSet based representations.
|
||||
*
|
||||
* The enum used to represent individual flags needs to implement the
|
||||
* BitmapableEnum interface.
|
||||
*
|
||||
* Example:
|
||||
* {@code
|
||||
* int bitmap = 0x11; // OFPPC_PORT_DOWN | OFPPC_NO_STP
|
||||
* EnumSet<OFPortConfig> s = toEnumSet(OFPortConfig.class, bitmap);
|
||||
* // s will contain OFPPC_PORT_DOWN and OFPPC_NO_STP
|
||||
* }
|
||||
*
|
||||
* {@code
|
||||
* EnumSet<OFPortConfig> s = EnumSet.of(OFPPC_NO_STP, OFPPC_PORT_DOWN);
|
||||
* int bitmap = toBitmap(s); // returns 0x11
|
||||
* }
|
||||
*
|
||||
*/
|
||||
public final class EnumBitmaps {
|
||||
|
||||
|
||||
private EnumBitmaps() { }
|
||||
|
||||
/**
|
||||
* Enums used to represent individual flags needs to implement this
|
||||
* interface.
|
||||
*/
|
||||
public interface BitmapableEnum {
|
||||
/** Return the value in the bitmap that the enum constant represents.
|
||||
* The returned value must have only a single bit set. E.g.,1 << 3
|
||||
*/
|
||||
int getValue();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Convert an integer bitmap to an EnumSet.
|
||||
*
|
||||
* See class description for example
|
||||
* @param type The Enum class to use. Must implement BitmapableEnum
|
||||
* @param bitmap The integer bitmap
|
||||
* @return A newly allocated EnumSet representing the bits set in the
|
||||
* bitmap
|
||||
* @throws NullPointerException if type is null
|
||||
* @throws IllegalArgumentException if any enum constant from type has
|
||||
* more than one bit set.
|
||||
* @throws IllegalArgumentException if the bitmap has any bits set not
|
||||
* represented by an enum constant.
|
||||
*/
|
||||
public static <E extends Enum<E> & BitmapableEnum>
|
||||
EnumSet<E> toEnumSet(Class<E> type, int bitmap) {
|
||||
if (type == null) {
|
||||
throw new NullPointerException("Given enum type must not be null");
|
||||
}
|
||||
EnumSet<E> s = EnumSet.noneOf(type);
|
||||
// allSetBitmap will eventually have all valid bits for the given
|
||||
// type set.
|
||||
int allSetBitmap = 0;
|
||||
for (E element: type.getEnumConstants()) {
|
||||
if (Integer.bitCount(element.getValue()) != 1) {
|
||||
String msg = String.format("The %s (%x) constant of the " +
|
||||
"enum %s is supposed to represent a bitmap entry but " +
|
||||
"has more than one bit set.",
|
||||
element.toString(), element.getValue(), type.getName());
|
||||
throw new IllegalArgumentException(msg);
|
||||
}
|
||||
allSetBitmap |= element.getValue();
|
||||
if ((bitmap & element.getValue()) != 0) {
|
||||
s.add(element);
|
||||
}
|
||||
}
|
||||
if (((~allSetBitmap) & bitmap) != 0) {
|
||||
// check if only valid flags are set in the given bitmap
|
||||
String msg = String.format("The bitmap %x for enum %s has " +
|
||||
"bits set that are presented by any enum constant",
|
||||
bitmap, type.getName());
|
||||
throw new IllegalArgumentException(msg);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the bitmap mask with all possible bits set. E.g., If a bitmap
|
||||
* has the individual flags 0x1, 0x2, and 0x8 (note the missing 0x4) then
|
||||
* the mask will be 0xb (1011 binary)
|
||||
*
|
||||
* @param type The Enum class to use. Must implement BitmapableEnum
|
||||
* @throws NullPointerException if type is null
|
||||
* @throws IllegalArgumentException if any enum constant from type has
|
||||
* more than one bit set
|
||||
* @return an integer with all possible bits for the given bitmap enum
|
||||
* type set.
|
||||
*/
|
||||
public static <E extends Enum<E> & BitmapableEnum>
|
||||
int getMask(Class<E> type) {
|
||||
if (type == null) {
|
||||
throw new NullPointerException("Given enum type must not be null");
|
||||
}
|
||||
// allSetBitmap will eventually have all valid bits for the given
|
||||
// type set.
|
||||
int allSetBitmap = 0;
|
||||
for (E element: type.getEnumConstants()) {
|
||||
if (Integer.bitCount(element.getValue()) != 1) {
|
||||
String msg = String.format("The %s (%x) constant of the " +
|
||||
"enum %s is supposed to represent a bitmap entry but " +
|
||||
"has more than one bit set.",
|
||||
element.toString(), element.getValue(), type.getName());
|
||||
throw new IllegalArgumentException(msg);
|
||||
}
|
||||
allSetBitmap |= element.getValue();
|
||||
}
|
||||
return allSetBitmap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the given EnumSet to the integer bitmap representation.
|
||||
* @param set The EnumSet to convert. The enum must implement
|
||||
* BitmapableEnum
|
||||
* @return the integer bitmap
|
||||
* @throws IllegalArgumentException if an enum constant from the set (!) has
|
||||
* more than one bit set
|
||||
* @throws NullPointerException if the set is null
|
||||
*/
|
||||
public static <E extends Enum<E> & BitmapableEnum>
|
||||
int toBitmap(Set<E> set) {
|
||||
if (set == null) {
|
||||
throw new NullPointerException("Given set must not be null");
|
||||
}
|
||||
int bitmap = 0;
|
||||
for (E element: set) {
|
||||
if (Integer.bitCount(element.getValue()) != 1) {
|
||||
String msg = String.format("The %s (%x) constant in the set " +
|
||||
"is supposed to represent a bitmap entry but " +
|
||||
"has more than one bit set.",
|
||||
element.toString(), element.getValue());
|
||||
throw new IllegalArgumentException(msg);
|
||||
}
|
||||
bitmap |= element.getValue();
|
||||
}
|
||||
return bitmap;
|
||||
}
|
||||
}
|
@ -1,85 +0,0 @@
|
||||
/**
|
||||
* Copyright 2012, Big Switch Networks, Inc.
|
||||
* Originally created by David Erickson, Stanford University
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License. You may obtain
|
||||
* a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
**/
|
||||
|
||||
package org.onlab.onos.of.controller.impl.util;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
/**
|
||||
* An iterator that will filter values from an iterator and return only
|
||||
* those values that match the predicate.
|
||||
*/
|
||||
public abstract class FilterIterator<T> implements Iterator<T> {
|
||||
protected Iterator<T> subIterator;
|
||||
protected T next;
|
||||
|
||||
/**
|
||||
* Construct a filter iterator from the given sub iterator.
|
||||
*
|
||||
* @param subIterator the sub iterator over which we'll filter
|
||||
*/
|
||||
public FilterIterator(Iterator<T> subIterator) {
|
||||
super();
|
||||
this.subIterator = subIterator;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the given value should be returned by the
|
||||
* filter.
|
||||
*
|
||||
* @param value the value to check
|
||||
* @return true if the value should be included
|
||||
*/
|
||||
protected abstract boolean matches(T value);
|
||||
|
||||
// ***********
|
||||
// Iterator<T>
|
||||
// ***********
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
if (next != null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
while (subIterator.hasNext()) {
|
||||
next = subIterator.next();
|
||||
if (matches(next)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
next = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public T next() {
|
||||
if (hasNext()) {
|
||||
T cur = next;
|
||||
next = null;
|
||||
return cur;
|
||||
}
|
||||
throw new NoSuchElementException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.util;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
|
||||
/**
|
||||
* The class representing an ONOS Instance ID.
|
||||
*
|
||||
* This class is immutable.
|
||||
*/
|
||||
public final class InstanceId {
|
||||
private final String id;
|
||||
|
||||
/**
|
||||
* Constructor from a string value.
|
||||
*
|
||||
* @param id the value to use.
|
||||
*/
|
||||
public InstanceId(String id) {
|
||||
this.id = checkNotNull(id);
|
||||
checkArgument(!id.isEmpty(), "Empty ONOS Instance ID");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return id.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj == this) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(obj instanceof InstanceId)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
InstanceId that = (InstanceId) obj;
|
||||
return this.id.equals(that.id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return id;
|
||||
}
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
/**
|
||||
* Copyright 2012 Big Switch Networks, Inc.
|
||||
* Originally created by David Erickson, Stanford University
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License. You may obtain
|
||||
* a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
**/
|
||||
|
||||
package org.onlab.onos.of.controller.impl.util;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
/**
|
||||
* Iterator over all values in an iterator of iterators.
|
||||
*
|
||||
* @param <T> the type of elements returned by this iterator
|
||||
*/
|
||||
public class IterableIterator<T> implements Iterator<T> {
|
||||
Iterator<? extends Iterable<T>> subIterator;
|
||||
Iterator<T> current = null;
|
||||
|
||||
public IterableIterator(Iterator<? extends Iterable<T>> subIterator) {
|
||||
super();
|
||||
this.subIterator = subIterator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
if (current == null) {
|
||||
if (subIterator.hasNext()) {
|
||||
current = subIterator.next().iterator();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
while (!current.hasNext() && subIterator.hasNext()) {
|
||||
current = subIterator.next().iterator();
|
||||
}
|
||||
|
||||
return current.hasNext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T next() {
|
||||
if (hasNext()) {
|
||||
return current.next();
|
||||
}
|
||||
throw new NoSuchElementException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
if (hasNext()) {
|
||||
current.remove();
|
||||
}
|
||||
throw new NoSuchElementException();
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
/**
|
||||
* Copyright 2011, Big Switch Networks, Inc.
|
||||
* Originally created by David Erickson, Stanford University
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License. You may obtain
|
||||
* a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
**/
|
||||
|
||||
package org.onlab.onos.of.controller.impl.util;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class LRUHashMap<K, V> extends LinkedHashMap<K, V> {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final int capacity;
|
||||
|
||||
public LRUHashMap(int capacity) {
|
||||
super(capacity + 1, 0.75f, true);
|
||||
this.capacity = capacity;
|
||||
}
|
||||
|
||||
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
|
||||
return size() > capacity;
|
||||
}
|
||||
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.util;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedHashSet;
|
||||
|
||||
import com.google.common.collect.ForwardingCollection;
|
||||
|
||||
/**
|
||||
* A simple wrapper / forwarder that forwards all calls to a LinkedHashSet.
|
||||
* This wrappers sole reason for existence is to implement the
|
||||
* OrderedCollection marker interface.
|
||||
*
|
||||
*/
|
||||
public class LinkedHashSetWrapper<E>
|
||||
extends ForwardingCollection<E> implements OrderedCollection<E> {
|
||||
private final Collection<E> delegate;
|
||||
|
||||
public LinkedHashSetWrapper() {
|
||||
super();
|
||||
this.delegate = new LinkedHashSet<E>();
|
||||
}
|
||||
|
||||
public LinkedHashSetWrapper(Collection<? extends E> c) {
|
||||
super();
|
||||
this.delegate = new LinkedHashSet<E>(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<E> delegate() {
|
||||
return this.delegate;
|
||||
}
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
/**
|
||||
* Copyright 2012 Big Switch Networks, Inc.
|
||||
* Originally created by David Erickson, Stanford University
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License. You may obtain
|
||||
* a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
**/
|
||||
|
||||
package org.onlab.onos.of.controller.impl.util;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
/**
|
||||
* Iterator over all values in an iterator of iterators.
|
||||
*
|
||||
* @param <T> the type of elements returned by this iterator
|
||||
*/
|
||||
public class MultiIterator<T> implements Iterator<T> {
|
||||
Iterator<Iterator<T>> subIterator;
|
||||
Iterator<T> current = null;
|
||||
|
||||
public MultiIterator(Iterator<Iterator<T>> subIterator) {
|
||||
super();
|
||||
this.subIterator = subIterator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
if (current == null) {
|
||||
if (subIterator.hasNext()) {
|
||||
current = subIterator.next();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
while (!current.hasNext() && subIterator.hasNext()) {
|
||||
current = subIterator.next();
|
||||
}
|
||||
|
||||
return current.hasNext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T next() {
|
||||
if (hasNext()) {
|
||||
return current.next();
|
||||
}
|
||||
throw new NoSuchElementException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
if (hasNext()) {
|
||||
current.remove();
|
||||
}
|
||||
throw new NoSuchElementException();
|
||||
}
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
package org.onlab.onos.of.controller.impl.util;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* A marker interface indicating that this Collection defines a particular
|
||||
* iteration order. The details about the iteration order are specified by
|
||||
* the concrete implementation.
|
||||
*
|
||||
* @param <E>
|
||||
*/
|
||||
public interface OrderedCollection<E> extends Collection<E> {
|
||||
|
||||
}
|
@ -1,167 +0,0 @@
|
||||
/**
|
||||
* Copyright 2011, Big Switch Networks, Inc.
|
||||
* Originally created by David Erickson, Stanford University
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License. You may obtain
|
||||
* a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
**/
|
||||
|
||||
package org.onlab.onos.of.controller.impl.internal;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
import net.onrc.onos.of.ctl.IOFSwitch;
|
||||
|
||||
import org.easymock.EasyMock;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
public class ControllerTest extends TestCase {
|
||||
|
||||
private Controller controller;
|
||||
private IOFSwitch sw;
|
||||
private OFChannelHandler h;
|
||||
|
||||
@Override
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
sw = EasyMock.createMock(IOFSwitch.class);
|
||||
h = EasyMock.createMock(OFChannelHandler.class);
|
||||
controller = new Controller();
|
||||
ControllerRunThread t = new ControllerRunThread();
|
||||
t.start();
|
||||
/*
|
||||
* Making sure the thread is properly started before making calls
|
||||
* to controller class.
|
||||
*/
|
||||
Thread.sleep(200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts the base mocks used in these tests.
|
||||
*/
|
||||
private void startMocks() {
|
||||
EasyMock.replay(sw, h);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the mocks to a known state.
|
||||
* Automatically called after tests.
|
||||
*/
|
||||
@After
|
||||
private void resetMocks() {
|
||||
EasyMock.reset(sw);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the controller instance.
|
||||
* @return the controller
|
||||
*/
|
||||
public Controller getController() {
|
||||
return controller;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the controller's main loop so that updates are processed.
|
||||
*/
|
||||
protected class ControllerRunThread extends Thread {
|
||||
@Override
|
||||
public void run() {
|
||||
controller.openFlowPort = 0; // Don't listen
|
||||
controller.activate();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify that we are able to add a switch that just connected.
|
||||
* If it already exists then this should fail
|
||||
*
|
||||
* @throws Exception error
|
||||
*/
|
||||
@Test
|
||||
public void testAddConnectedSwitches() throws Exception {
|
||||
startMocks();
|
||||
assertTrue(controller.addConnectedSwitch(0, h));
|
||||
assertFalse(controller.addConnectedSwitch(0, h));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add active master but cannot re-add active master.
|
||||
* @throws Exception an error occurred.
|
||||
*/
|
||||
@Test
|
||||
public void testAddActivatedMasterSwitch() throws Exception {
|
||||
startMocks();
|
||||
controller.addConnectedSwitch(0, h);
|
||||
assertTrue(controller.addActivatedMasterSwitch(0, sw));
|
||||
assertFalse(controller.addActivatedMasterSwitch(0, sw));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that an activated switch can be added but cannot be re-added.
|
||||
*
|
||||
* @throws Exception an error occurred
|
||||
*/
|
||||
@Test
|
||||
public void testAddActivatedEqualSwitch() throws Exception {
|
||||
startMocks();
|
||||
controller.addConnectedSwitch(0, h);
|
||||
assertTrue(controller.addActivatedEqualSwitch(0, sw));
|
||||
assertFalse(controller.addActivatedEqualSwitch(0, sw));
|
||||
}
|
||||
|
||||
/**
|
||||
* Move an equal switch to master.
|
||||
* @throws Exception an error occurred
|
||||
*/
|
||||
@Test
|
||||
public void testTranstitionToMaster() throws Exception {
|
||||
startMocks();
|
||||
controller.addConnectedSwitch(0, h);
|
||||
controller.addActivatedEqualSwitch(0, sw);
|
||||
controller.transitionToMasterSwitch(0);
|
||||
assertNotNull(controller.getMasterSwitch(0));
|
||||
}
|
||||
|
||||
/**
|
||||
* Transition a master switch to equal state.
|
||||
* @throws Exception an error occurred
|
||||
*/
|
||||
@Test
|
||||
public void testTranstitionToEqual() throws Exception {
|
||||
startMocks();
|
||||
controller.addConnectedSwitch(0, h);
|
||||
controller.addActivatedMasterSwitch(0, sw);
|
||||
controller.transitionToEqualSwitch(0);
|
||||
assertNotNull(controller.getEqualSwitch(0));
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the switch from the controller instance.
|
||||
* @throws Exception an error occurred
|
||||
*/
|
||||
@Test
|
||||
public void testRemoveSwitch() throws Exception {
|
||||
sw.cancelAllStatisticsReplies();
|
||||
EasyMock.expectLastCall().once();
|
||||
sw.setConnected(false);
|
||||
EasyMock.expectLastCall().once();
|
||||
startMocks();
|
||||
controller.addConnectedSwitch(0, h);
|
||||
controller.addActivatedMasterSwitch(0, sw);
|
||||
controller.removeConnectedSwitch(0);
|
||||
assertNull(controller.getSwitch(0));
|
||||
EasyMock.verify(sw, h);
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,59 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template const.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
|
||||
public enum OFActionType {
|
||||
OUTPUT,
|
||||
SET_VLAN_VID,
|
||||
SET_VLAN_PCP,
|
||||
STRIP_VLAN,
|
||||
SET_DL_SRC,
|
||||
SET_DL_DST,
|
||||
SET_NW_SRC,
|
||||
SET_NW_DST,
|
||||
SET_NW_TOS,
|
||||
SET_TP_SRC,
|
||||
SET_TP_DST,
|
||||
ENQUEUE,
|
||||
EXPERIMENTER,
|
||||
SET_NW_ECN,
|
||||
COPY_TTL_OUT,
|
||||
COPY_TTL_IN,
|
||||
SET_MPLS_LABEL,
|
||||
SET_MPLS_TC,
|
||||
SET_MPLS_TTL,
|
||||
DEC_MPLS_TTL,
|
||||
PUSH_VLAN,
|
||||
POP_VLAN,
|
||||
PUSH_MPLS,
|
||||
POP_MPLS,
|
||||
SET_QUEUE,
|
||||
GROUP,
|
||||
SET_NW_TTL,
|
||||
DEC_NW_TTL,
|
||||
SET_FIELD,
|
||||
PUSH_PBB,
|
||||
POP_PBB;
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFAggregateStatsReply extends OFObject, OFStatsReply {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsReplyFlags> getFlags();
|
||||
U64 getPacketCount();
|
||||
U64 getByteCount();
|
||||
long getFlowCount();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFStatsReply.Builder {
|
||||
OFAggregateStatsReply build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsReplyFlags> getFlags();
|
||||
Builder setFlags(Set<OFStatsReplyFlags> flags);
|
||||
U64 getPacketCount();
|
||||
Builder setPacketCount(U64 packetCount);
|
||||
U64 getByteCount();
|
||||
Builder setByteCount(U64 byteCount);
|
||||
long getFlowCount();
|
||||
Builder setFlowCount(long flowCount);
|
||||
}
|
||||
}
|
@ -1,67 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFAggregateStatsRequest extends OFObject, OFStatsRequest<OFAggregateStatsReply>, OFRequest<OFAggregateStatsReply> {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsRequestFlags> getFlags();
|
||||
TableId getTableId();
|
||||
OFPort getOutPort();
|
||||
OFGroup getOutGroup() throws UnsupportedOperationException;
|
||||
U64 getCookie() throws UnsupportedOperationException;
|
||||
U64 getCookieMask() throws UnsupportedOperationException;
|
||||
Match getMatch();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFStatsRequest.Builder<OFAggregateStatsReply> {
|
||||
OFAggregateStatsRequest build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsRequestFlags> getFlags();
|
||||
Builder setFlags(Set<OFStatsRequestFlags> flags);
|
||||
TableId getTableId();
|
||||
Builder setTableId(TableId tableId);
|
||||
OFPort getOutPort();
|
||||
Builder setOutPort(OFPort outPort);
|
||||
OFGroup getOutGroup() throws UnsupportedOperationException;
|
||||
Builder setOutGroup(OFGroup outGroup) throws UnsupportedOperationException;
|
||||
U64 getCookie() throws UnsupportedOperationException;
|
||||
Builder setCookie(U64 cookie) throws UnsupportedOperationException;
|
||||
U64 getCookieMask() throws UnsupportedOperationException;
|
||||
Builder setCookieMask(U64 cookieMask) throws UnsupportedOperationException;
|
||||
Match getMatch();
|
||||
Builder setMatch(Match match);
|
||||
}
|
||||
}
|
@ -1,61 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFAsyncGetReply extends OFObject, OFMessage {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getPacketInMaskEqualMaster();
|
||||
long getPacketInMaskSlave();
|
||||
long getPortStatusMaskEqualMaster();
|
||||
long getPortStatusMaskSlave();
|
||||
long getFlowRemovedMaskEqualMaster();
|
||||
long getFlowRemovedMaskSlave();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFMessage.Builder {
|
||||
OFAsyncGetReply build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getPacketInMaskEqualMaster();
|
||||
Builder setPacketInMaskEqualMaster(long packetInMaskEqualMaster);
|
||||
long getPacketInMaskSlave();
|
||||
Builder setPacketInMaskSlave(long packetInMaskSlave);
|
||||
long getPortStatusMaskEqualMaster();
|
||||
Builder setPortStatusMaskEqualMaster(long portStatusMaskEqualMaster);
|
||||
long getPortStatusMaskSlave();
|
||||
Builder setPortStatusMaskSlave(long portStatusMaskSlave);
|
||||
long getFlowRemovedMaskEqualMaster();
|
||||
Builder setFlowRemovedMaskEqualMaster(long flowRemovedMaskEqualMaster);
|
||||
long getFlowRemovedMaskSlave();
|
||||
Builder setFlowRemovedMaskSlave(long flowRemovedMaskSlave);
|
||||
}
|
||||
}
|
@ -1,61 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFAsyncGetRequest extends OFObject, OFMessage, OFRequest<OFAsyncGetReply> {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getPacketInMaskEqualMaster();
|
||||
long getPacketInMaskSlave();
|
||||
long getPortStatusMaskEqualMaster();
|
||||
long getPortStatusMaskSlave();
|
||||
long getFlowRemovedMaskEqualMaster();
|
||||
long getFlowRemovedMaskSlave();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFMessage.Builder {
|
||||
OFAsyncGetRequest build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getPacketInMaskEqualMaster();
|
||||
Builder setPacketInMaskEqualMaster(long packetInMaskEqualMaster);
|
||||
long getPacketInMaskSlave();
|
||||
Builder setPacketInMaskSlave(long packetInMaskSlave);
|
||||
long getPortStatusMaskEqualMaster();
|
||||
Builder setPortStatusMaskEqualMaster(long portStatusMaskEqualMaster);
|
||||
long getPortStatusMaskSlave();
|
||||
Builder setPortStatusMaskSlave(long portStatusMaskSlave);
|
||||
long getFlowRemovedMaskEqualMaster();
|
||||
Builder setFlowRemovedMaskEqualMaster(long flowRemovedMaskEqualMaster);
|
||||
long getFlowRemovedMaskSlave();
|
||||
Builder setFlowRemovedMaskSlave(long flowRemovedMaskSlave);
|
||||
}
|
||||
}
|
@ -1,62 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFAsyncSet extends OFObject, OFMessage {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getPacketInMaskEqualMaster();
|
||||
long getPacketInMaskSlave();
|
||||
long getPortStatusMaskEqualMaster();
|
||||
long getPortStatusMaskSlave();
|
||||
long getFlowRemovedMaskEqualMaster();
|
||||
long getFlowRemovedMaskSlave();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFMessage.Builder {
|
||||
OFAsyncSet build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getPacketInMaskEqualMaster();
|
||||
Builder setPacketInMaskEqualMaster(long packetInMaskEqualMaster);
|
||||
long getPacketInMaskSlave();
|
||||
Builder setPacketInMaskSlave(long packetInMaskSlave);
|
||||
long getPortStatusMaskEqualMaster();
|
||||
Builder setPortStatusMaskEqualMaster(long portStatusMaskEqualMaster);
|
||||
long getPortStatusMaskSlave();
|
||||
Builder setPortStatusMaskSlave(long portStatusMaskSlave);
|
||||
long getFlowRemovedMaskEqualMaster();
|
||||
Builder setFlowRemovedMaskEqualMaster(long flowRemovedMaskEqualMaster);
|
||||
long getFlowRemovedMaskSlave();
|
||||
Builder setFlowRemovedMaskSlave(long flowRemovedMaskSlave);
|
||||
}
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template const.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
|
||||
public enum OFBadActionCode {
|
||||
BAD_TYPE,
|
||||
BAD_LEN,
|
||||
BAD_EXPERIMENTER,
|
||||
BAD_EXPERIMENTER_TYPE,
|
||||
BAD_OUT_PORT,
|
||||
BAD_ARGUMENT,
|
||||
EPERM,
|
||||
TOO_MANY,
|
||||
BAD_QUEUE,
|
||||
BAD_OUT_GROUP,
|
||||
MATCH_INCONSISTENT,
|
||||
UNSUPPORTED_ORDER,
|
||||
BAD_TAG,
|
||||
BAD_SET_TYPE,
|
||||
BAD_SET_LEN,
|
||||
BAD_SET_ARGUMENT;
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template const.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
|
||||
public enum OFBadInstructionCode {
|
||||
UNKNOWN_INST,
|
||||
UNSUP_INST,
|
||||
BAD_TABLE_ID,
|
||||
UNSUP_METADATA,
|
||||
UNSUP_METADATA_MASK,
|
||||
UNSUP_EXP_INST,
|
||||
BAD_EXPERIMENTER,
|
||||
BAD_EXPERIMENTER_TYPE,
|
||||
BAD_LEN,
|
||||
EPERM;
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template const.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
|
||||
public enum OFBadMatchCode {
|
||||
BAD_TYPE,
|
||||
BAD_LEN,
|
||||
BAD_TAG,
|
||||
BAD_DL_ADDR_MASK,
|
||||
BAD_NW_ADDR_MASK,
|
||||
BAD_WILDCARDS,
|
||||
BAD_FIELD,
|
||||
BAD_VALUE,
|
||||
BAD_MASK,
|
||||
BAD_PREREQ,
|
||||
DUP_FIELD,
|
||||
EPERM;
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template const.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
|
||||
public enum OFBadRequestCode {
|
||||
BAD_VERSION,
|
||||
BAD_TYPE,
|
||||
BAD_STAT,
|
||||
BAD_EXPERIMENTER,
|
||||
BAD_SUBTYPE,
|
||||
EPERM,
|
||||
BAD_LEN,
|
||||
BUFFER_EMPTY,
|
||||
BUFFER_UNKNOWN,
|
||||
BAD_TABLE_ID,
|
||||
BAD_EXPERIMENTER_TYPE,
|
||||
IS_SLAVE,
|
||||
BAD_PORT,
|
||||
BAD_PACKET,
|
||||
MULTIPART_BUFFER_OVERFLOW;
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBarrierReply extends OFObject, OFMessage {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFMessage.Builder {
|
||||
OFBarrierReply build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
}
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBarrierRequest extends OFObject, OFMessage, OFRequest<OFBarrierReply> {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFMessage.Builder {
|
||||
OFBarrierRequest build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
}
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnArpIdle extends OFObject, OFBsnHeader {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
int getVlanVid();
|
||||
IPv4Address getIpv4Addr();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnArpIdle build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
int getVlanVid();
|
||||
Builder setVlanVid(int vlanVid);
|
||||
IPv4Address getIpv4Addr();
|
||||
Builder setIpv4Addr(IPv4Address ipv4Addr);
|
||||
}
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnBwClearDataReply extends OFObject, OFBsnHeader {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
long getStatus();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnBwClearDataReply build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
long getStatus();
|
||||
Builder setStatus(long status);
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnBwClearDataRequest extends OFObject, OFBsnHeader, OFRequest<OFBsnBwClearDataReply> {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnBwClearDataRequest build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
}
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnBwEnableGetReply extends OFObject, OFBsnHeader {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
long getEnabled();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnBwEnableGetReply build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
long getEnabled();
|
||||
Builder setEnabled(long enabled);
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnBwEnableGetRequest extends OFObject, OFBsnHeader, OFRequest<OFBsnBwEnableGetReply> {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnBwEnableGetRequest build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
}
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnBwEnableSetReply extends OFObject, OFBsnHeader {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
long getEnable();
|
||||
long getStatus();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnBwEnableSetReply build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
long getEnable();
|
||||
Builder setEnable(long enable);
|
||||
long getStatus();
|
||||
Builder setStatus(long status);
|
||||
}
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnBwEnableSetRequest extends OFObject, OFBsnHeader, OFRequest<OFBsnBwEnableSetReply> {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
long getEnable();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnBwEnableSetRequest build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
long getEnable();
|
||||
Builder setEnable(long enable);
|
||||
}
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnControllerConnection extends OFObject {
|
||||
OFBsnControllerConnectionState getState();
|
||||
OFAuxId getAuxiliaryId();
|
||||
OFControllerRole getRole();
|
||||
String getUri();
|
||||
OFVersion getVersion();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder {
|
||||
OFBsnControllerConnection build();
|
||||
OFBsnControllerConnectionState getState();
|
||||
Builder setState(OFBsnControllerConnectionState state);
|
||||
OFAuxId getAuxiliaryId();
|
||||
Builder setAuxiliaryId(OFAuxId auxiliaryId);
|
||||
OFControllerRole getRole();
|
||||
Builder setRole(OFControllerRole role);
|
||||
String getUri();
|
||||
Builder setUri(String uri);
|
||||
OFVersion getVersion();
|
||||
}
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template const.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
|
||||
public enum OFBsnControllerConnectionState {
|
||||
BSN_CONTROLLER_CONNECTION_STATE_DISCONNECTED,
|
||||
BSN_CONTROLLER_CONNECTION_STATE_CONNECTED;
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.List;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnControllerConnectionsReply extends OFObject, OFBsnHeader {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
List<OFBsnControllerConnection> getConnections();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnControllerConnectionsReply build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
List<OFBsnControllerConnection> getConnections();
|
||||
Builder setConnections(List<OFBsnControllerConnection> connections);
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnControllerConnectionsRequest extends OFObject, OFBsnHeader, OFRequest<OFBsnControllerConnectionsReply> {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnControllerConnectionsRequest build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
}
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template const.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
|
||||
public enum OFBsnControllerRoleReason {
|
||||
BSN_CONTROLLER_ROLE_REASON_MASTER_REQUEST,
|
||||
BSN_CONTROLLER_ROLE_REASON_CONFIG,
|
||||
BSN_CONTROLLER_ROLE_REASON_EXPERIMENTER;
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnDebugCounterDescStatsEntry extends OFObject {
|
||||
U64 getCounterId();
|
||||
String getName();
|
||||
String getDescription();
|
||||
OFVersion getVersion();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder {
|
||||
OFBsnDebugCounterDescStatsEntry build();
|
||||
U64 getCounterId();
|
||||
Builder setCounterId(U64 counterId);
|
||||
String getName();
|
||||
Builder setName(String name);
|
||||
String getDescription();
|
||||
Builder setDescription(String description);
|
||||
OFVersion getVersion();
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnDebugCounterDescStatsReply extends OFObject, OFBsnStatsReply {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsReplyFlags> getFlags();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
List<OFBsnDebugCounterDescStatsEntry> getEntries();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnStatsReply.Builder {
|
||||
OFBsnDebugCounterDescStatsReply build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsReplyFlags> getFlags();
|
||||
Builder setFlags(Set<OFStatsReplyFlags> flags);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
List<OFBsnDebugCounterDescStatsEntry> getEntries();
|
||||
Builder setEntries(List<OFBsnDebugCounterDescStatsEntry> entries);
|
||||
}
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnDebugCounterDescStatsRequest extends OFObject, OFBsnStatsRequest<OFBsnDebugCounterDescStatsReply>, OFRequest<OFBsnDebugCounterDescStatsReply> {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsRequestFlags> getFlags();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnStatsRequest.Builder<OFBsnDebugCounterDescStatsReply> {
|
||||
OFBsnDebugCounterDescStatsRequest build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsRequestFlags> getFlags();
|
||||
Builder setFlags(Set<OFStatsRequestFlags> flags);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
}
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnDebugCounterStatsEntry extends OFObject {
|
||||
U64 getCounterId();
|
||||
U64 getValue();
|
||||
OFVersion getVersion();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder {
|
||||
OFBsnDebugCounterStatsEntry build();
|
||||
U64 getCounterId();
|
||||
Builder setCounterId(U64 counterId);
|
||||
U64 getValue();
|
||||
Builder setValue(U64 value);
|
||||
OFVersion getVersion();
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnDebugCounterStatsReply extends OFObject, OFBsnStatsReply {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsReplyFlags> getFlags();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
List<OFBsnDebugCounterStatsEntry> getEntries();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnStatsReply.Builder {
|
||||
OFBsnDebugCounterStatsReply build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsReplyFlags> getFlags();
|
||||
Builder setFlags(Set<OFStatsReplyFlags> flags);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
List<OFBsnDebugCounterStatsEntry> getEntries();
|
||||
Builder setEntries(List<OFBsnDebugCounterStatsEntry> entries);
|
||||
}
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnDebugCounterStatsRequest extends OFObject, OFBsnStatsRequest<OFBsnDebugCounterStatsReply>, OFRequest<OFBsnDebugCounterStatsReply> {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsRequestFlags> getFlags();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnStatsRequest.Builder<OFBsnDebugCounterStatsReply> {
|
||||
OFBsnDebugCounterStatsRequest build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsRequestFlags> getFlags();
|
||||
Builder setFlags(Set<OFStatsRequestFlags> flags);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnFlowChecksumBucketStatsEntry extends OFObject {
|
||||
U64 getChecksum();
|
||||
OFVersion getVersion();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder {
|
||||
OFBsnFlowChecksumBucketStatsEntry build();
|
||||
U64 getChecksum();
|
||||
Builder setChecksum(U64 checksum);
|
||||
OFVersion getVersion();
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnFlowChecksumBucketStatsReply extends OFObject, OFBsnStatsReply {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsReplyFlags> getFlags();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
List<OFBsnFlowChecksumBucketStatsEntry> getEntries();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnStatsReply.Builder {
|
||||
OFBsnFlowChecksumBucketStatsReply build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsReplyFlags> getFlags();
|
||||
Builder setFlags(Set<OFStatsReplyFlags> flags);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
List<OFBsnFlowChecksumBucketStatsEntry> getEntries();
|
||||
Builder setEntries(List<OFBsnFlowChecksumBucketStatsEntry> entries);
|
||||
}
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnFlowChecksumBucketStatsRequest extends OFObject, OFBsnStatsRequest<OFBsnFlowChecksumBucketStatsReply>, OFRequest<OFBsnFlowChecksumBucketStatsReply> {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsRequestFlags> getFlags();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
TableId getTableId();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnStatsRequest.Builder<OFBsnFlowChecksumBucketStatsReply> {
|
||||
OFBsnFlowChecksumBucketStatsRequest build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsRequestFlags> getFlags();
|
||||
Builder setFlags(Set<OFStatsRequestFlags> flags);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
TableId getTableId();
|
||||
Builder setTableId(TableId tableId);
|
||||
}
|
||||
}
|
@ -1,59 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnFlowIdle extends OFObject, OFBsnHeader {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
U64 getCookie();
|
||||
int getPriority();
|
||||
TableId getTableId();
|
||||
Match getMatch();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnFlowIdle build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
U64 getCookie();
|
||||
Builder setCookie(U64 cookie);
|
||||
int getPriority();
|
||||
Builder setPriority(int priority);
|
||||
TableId getTableId();
|
||||
Builder setTableId(TableId tableId);
|
||||
Match getMatch();
|
||||
Builder setMatch(Match match);
|
||||
}
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnFlowIdleEnableGetReply extends OFObject, OFBsnHeader {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
long getEnabled();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnFlowIdleEnableGetReply build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
long getEnabled();
|
||||
Builder setEnabled(long enabled);
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnFlowIdleEnableGetRequest extends OFObject, OFBsnHeader, OFRequest<OFBsnFlowIdleEnableGetReply> {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnFlowIdleEnableGetRequest build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
}
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnFlowIdleEnableSetReply extends OFObject, OFBsnHeader {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
long getEnable();
|
||||
long getStatus();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnFlowIdleEnableSetReply build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
long getEnable();
|
||||
Builder setEnable(long enable);
|
||||
long getStatus();
|
||||
Builder setStatus(long status);
|
||||
}
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnFlowIdleEnableSetRequest extends OFObject, OFBsnHeader, OFRequest<OFBsnFlowIdleEnableSetReply> {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
long getEnable();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnFlowIdleEnableSetRequest build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
long getEnable();
|
||||
Builder setEnable(long enable);
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableBucketStatsEntry extends OFObject {
|
||||
U128 getChecksum();
|
||||
OFVersion getVersion();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder {
|
||||
OFBsnGentableBucketStatsEntry build();
|
||||
U128 getChecksum();
|
||||
Builder setChecksum(U128 checksum);
|
||||
OFVersion getVersion();
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableBucketStatsReply extends OFObject, OFBsnStatsReply {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsReplyFlags> getFlags();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
List<OFBsnGentableBucketStatsEntry> getEntries();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnStatsReply.Builder {
|
||||
OFBsnGentableBucketStatsReply build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsReplyFlags> getFlags();
|
||||
Builder setFlags(Set<OFStatsReplyFlags> flags);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
List<OFBsnGentableBucketStatsEntry> getEntries();
|
||||
Builder setEntries(List<OFBsnGentableBucketStatsEntry> entries);
|
||||
}
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableBucketStatsRequest extends OFObject, OFBsnStatsRequest<OFBsnGentableBucketStatsReply>, OFRequest<OFBsnGentableBucketStatsReply> {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsRequestFlags> getFlags();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
GenTableId getTableId();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnStatsRequest.Builder<OFBsnGentableBucketStatsReply> {
|
||||
OFBsnGentableBucketStatsRequest build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsRequestFlags> getFlags();
|
||||
Builder setFlags(Set<OFStatsRequestFlags> flags);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
GenTableId getTableId();
|
||||
Builder setTableId(GenTableId tableId);
|
||||
}
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableClearReply extends OFObject, OFBsnHeader {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
GenTableId getTableId();
|
||||
long getDeletedCount();
|
||||
long getErrorCount();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnGentableClearReply build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
GenTableId getTableId();
|
||||
Builder setTableId(GenTableId tableId);
|
||||
long getDeletedCount();
|
||||
Builder setDeletedCount(long deletedCount);
|
||||
long getErrorCount();
|
||||
Builder setErrorCount(long errorCount);
|
||||
}
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableClearRequest extends OFObject, OFBsnHeader, OFRequest<OFBsnGentableClearReply> {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
GenTableId getTableId();
|
||||
U128 getChecksum();
|
||||
U128 getChecksumMask();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnGentableClearRequest build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
GenTableId getTableId();
|
||||
Builder setTableId(GenTableId tableId);
|
||||
U128 getChecksum();
|
||||
Builder setChecksum(U128 checksum);
|
||||
U128 getChecksumMask();
|
||||
Builder setChecksumMask(U128 checksumMask);
|
||||
}
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableDescStatsEntry extends OFObject {
|
||||
GenTableId getTableId();
|
||||
String getName();
|
||||
long getBucketsSize();
|
||||
long getMaxEntries();
|
||||
OFVersion getVersion();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder {
|
||||
OFBsnGentableDescStatsEntry build();
|
||||
GenTableId getTableId();
|
||||
Builder setTableId(GenTableId tableId);
|
||||
String getName();
|
||||
Builder setName(String name);
|
||||
long getBucketsSize();
|
||||
Builder setBucketsSize(long bucketsSize);
|
||||
long getMaxEntries();
|
||||
Builder setMaxEntries(long maxEntries);
|
||||
OFVersion getVersion();
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableDescStatsReply extends OFObject, OFBsnStatsReply {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsReplyFlags> getFlags();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
List<OFBsnGentableDescStatsEntry> getEntries();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnStatsReply.Builder {
|
||||
OFBsnGentableDescStatsReply build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsReplyFlags> getFlags();
|
||||
Builder setFlags(Set<OFStatsReplyFlags> flags);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
List<OFBsnGentableDescStatsEntry> getEntries();
|
||||
Builder setEntries(List<OFBsnGentableDescStatsEntry> entries);
|
||||
}
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableDescStatsRequest extends OFObject, OFBsnStatsRequest<OFBsnGentableDescStatsReply>, OFRequest<OFBsnGentableDescStatsReply> {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsRequestFlags> getFlags();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnStatsRequest.Builder<OFBsnGentableDescStatsReply> {
|
||||
OFBsnGentableDescStatsRequest build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsRequestFlags> getFlags();
|
||||
Builder setFlags(Set<OFStatsRequestFlags> flags);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
}
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.List;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableEntryAdd extends OFObject, OFBsnHeader {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
GenTableId getTableId();
|
||||
U128 getChecksum();
|
||||
List<OFBsnTlv> getKey();
|
||||
List<OFBsnTlv> getValue();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnGentableEntryAdd build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
GenTableId getTableId();
|
||||
Builder setTableId(GenTableId tableId);
|
||||
U128 getChecksum();
|
||||
Builder setChecksum(U128 checksum);
|
||||
List<OFBsnTlv> getKey();
|
||||
Builder setKey(List<OFBsnTlv> key);
|
||||
List<OFBsnTlv> getValue();
|
||||
Builder setValue(List<OFBsnTlv> value);
|
||||
}
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.List;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableEntryDelete extends OFObject, OFBsnHeader {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
GenTableId getTableId();
|
||||
List<OFBsnTlv> getKey();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnGentableEntryDelete build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
GenTableId getTableId();
|
||||
Builder setTableId(GenTableId tableId);
|
||||
List<OFBsnTlv> getKey();
|
||||
Builder setKey(List<OFBsnTlv> key);
|
||||
}
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.List;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableEntryDescStatsEntry extends OFObject {
|
||||
U128 getChecksum();
|
||||
List<OFBsnTlv> getKey();
|
||||
List<OFBsnTlv> getValue();
|
||||
OFVersion getVersion();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder {
|
||||
OFBsnGentableEntryDescStatsEntry build();
|
||||
U128 getChecksum();
|
||||
Builder setChecksum(U128 checksum);
|
||||
List<OFBsnTlv> getKey();
|
||||
Builder setKey(List<OFBsnTlv> key);
|
||||
List<OFBsnTlv> getValue();
|
||||
Builder setValue(List<OFBsnTlv> value);
|
||||
OFVersion getVersion();
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableEntryDescStatsReply extends OFObject, OFBsnStatsReply {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsReplyFlags> getFlags();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
List<OFBsnGentableEntryDescStatsEntry> getEntries();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnStatsReply.Builder {
|
||||
OFBsnGentableEntryDescStatsReply build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsReplyFlags> getFlags();
|
||||
Builder setFlags(Set<OFStatsReplyFlags> flags);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
List<OFBsnGentableEntryDescStatsEntry> getEntries();
|
||||
Builder setEntries(List<OFBsnGentableEntryDescStatsEntry> entries);
|
||||
}
|
||||
}
|
@ -1,62 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableEntryDescStatsRequest extends OFObject, OFBsnStatsRequest<OFBsnGentableEntryDescStatsReply>, OFRequest<OFBsnGentableEntryDescStatsReply> {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsRequestFlags> getFlags();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
GenTableId getTableId();
|
||||
U128 getChecksum();
|
||||
U128 getChecksumMask();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnStatsRequest.Builder<OFBsnGentableEntryDescStatsReply> {
|
||||
OFBsnGentableEntryDescStatsRequest build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsRequestFlags> getFlags();
|
||||
Builder setFlags(Set<OFStatsRequestFlags> flags);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
GenTableId getTableId();
|
||||
Builder setTableId(GenTableId tableId);
|
||||
U128 getChecksum();
|
||||
Builder setChecksum(U128 checksum);
|
||||
U128 getChecksumMask();
|
||||
Builder setChecksumMask(U128 checksumMask);
|
||||
}
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.List;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableEntryStatsEntry extends OFObject {
|
||||
List<OFBsnTlv> getKey();
|
||||
List<OFBsnTlv> getStats();
|
||||
OFVersion getVersion();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder {
|
||||
OFBsnGentableEntryStatsEntry build();
|
||||
List<OFBsnTlv> getKey();
|
||||
Builder setKey(List<OFBsnTlv> key);
|
||||
List<OFBsnTlv> getStats();
|
||||
Builder setStats(List<OFBsnTlv> stats);
|
||||
OFVersion getVersion();
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableEntryStatsReply extends OFObject, OFBsnStatsReply {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsReplyFlags> getFlags();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
List<OFBsnGentableEntryStatsEntry> getEntries();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnStatsReply.Builder {
|
||||
OFBsnGentableEntryStatsReply build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsReplyFlags> getFlags();
|
||||
Builder setFlags(Set<OFStatsReplyFlags> flags);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
List<OFBsnGentableEntryStatsEntry> getEntries();
|
||||
Builder setEntries(List<OFBsnGentableEntryStatsEntry> entries);
|
||||
}
|
||||
}
|
@ -1,62 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableEntryStatsRequest extends OFObject, OFBsnStatsRequest<OFBsnGentableEntryStatsReply>, OFRequest<OFBsnGentableEntryStatsReply> {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsRequestFlags> getFlags();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
GenTableId getTableId();
|
||||
U128 getChecksum();
|
||||
U128 getChecksumMask();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnStatsRequest.Builder<OFBsnGentableEntryStatsReply> {
|
||||
OFBsnGentableEntryStatsRequest build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
OFStatsType getStatsType();
|
||||
Set<OFStatsRequestFlags> getFlags();
|
||||
Builder setFlags(Set<OFStatsRequestFlags> flags);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
GenTableId getTableId();
|
||||
Builder setTableId(GenTableId tableId);
|
||||
U128 getChecksum();
|
||||
Builder setChecksum(U128 checksum);
|
||||
U128 getChecksumMask();
|
||||
Builder setChecksumMask(U128 checksumMask);
|
||||
}
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import java.util.Set;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableSetBucketsSize extends OFObject, OFBsnHeader {
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
GenTableId getTableId();
|
||||
long getBucketsSize();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder extends OFBsnHeader.Builder {
|
||||
OFBsnGentableSetBucketsSize build();
|
||||
OFVersion getVersion();
|
||||
OFType getType();
|
||||
long getXid();
|
||||
Builder setXid(long xid);
|
||||
long getExperimenter();
|
||||
long getSubtype();
|
||||
GenTableId getTableId();
|
||||
Builder setTableId(GenTableId tableId);
|
||||
long getBucketsSize();
|
||||
Builder setBucketsSize(long bucketsSize);
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
|
||||
// Copyright (c) 2011, 2012 Open Networking Foundation
|
||||
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
|
||||
// This library was generated by the LoxiGen Compiler.
|
||||
// See the file LICENSE.txt which should have been included in the source distribution
|
||||
|
||||
// Automatically generated by LOXI from template of_interface.java
|
||||
// Do not modify
|
||||
|
||||
package org.projectfloodlight.openflow.protocol;
|
||||
|
||||
import org.projectfloodlight.openflow.protocol.*;
|
||||
import org.projectfloodlight.openflow.protocol.action.*;
|
||||
import org.projectfloodlight.openflow.protocol.actionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.bsntlv.*;
|
||||
import org.projectfloodlight.openflow.protocol.errormsg.*;
|
||||
import org.projectfloodlight.openflow.protocol.meterband.*;
|
||||
import org.projectfloodlight.openflow.protocol.instruction.*;
|
||||
import org.projectfloodlight.openflow.protocol.instructionid.*;
|
||||
import org.projectfloodlight.openflow.protocol.match.*;
|
||||
import org.projectfloodlight.openflow.protocol.oxm.*;
|
||||
import org.projectfloodlight.openflow.protocol.queueprop.*;
|
||||
import org.projectfloodlight.openflow.types.*;
|
||||
import org.projectfloodlight.openflow.util.*;
|
||||
import org.projectfloodlight.openflow.exceptions.*;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
public interface OFBsnGentableStatsEntry extends OFObject {
|
||||
GenTableId getTableId();
|
||||
long getEntryCount();
|
||||
U128 getChecksum();
|
||||
OFVersion getVersion();
|
||||
|
||||
void writeTo(ChannelBuffer channelBuffer);
|
||||
|
||||
Builder createBuilder();
|
||||
public interface Builder {
|
||||
OFBsnGentableStatsEntry build();
|
||||
GenTableId getTableId();
|
||||
Builder setTableId(GenTableId tableId);
|
||||
long getEntryCount();
|
||||
Builder setEntryCount(long entryCount);
|
||||
U128 getChecksum();
|
||||
Builder setChecksum(U128 checksum);
|
||||
OFVersion getVersion();
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user