diff --git a/build.xml b/build.xml index 7d696dd9d1b5ce6eecab67b7367628c861a0d038..886fc60d613994ebfedfff0b6b0ac09c8c3bb7ca 100644 --- a/build.xml +++ b/build.xml @@ -49,6 +49,7 @@ <include name="org.restlet.ext.slf4j-2.1-RC1.jar"/> <include name="simple-4.1.21.jar"/> <include name="netty-3.2.6.Final.jar"/> + <include name="args4j-2.0.16.jar"/> </patternset> <patternset id="genlib"> <include name="libthrift-0.7.0.jar"/> diff --git a/lib/args4j-2.0.16.jar b/lib/args4j-2.0.16.jar new file mode 100644 index 0000000000000000000000000000000000000000..cfb6a291089fa564302b6a534c09cb9a271aaabf Binary files /dev/null and b/lib/args4j-2.0.16.jar differ diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java index a94ef0f6fbcf4eb9334238eb127db31e6f291e50..3f152d4329acafe11d296de342baa2ded3bb4dd9 100644 --- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java +++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java @@ -96,6 +96,8 @@ import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory; import org.jboss.netty.handler.timeout.IdleStateAwareChannelUpstreamHandler; import org.jboss.netty.handler.timeout.IdleStateEvent; import org.jboss.netty.handler.timeout.ReadTimeoutException; +import org.kohsuke.args4j.CmdLineException; +import org.kohsuke.args4j.CmdLineParser; import org.openflow.protocol.OFEchoReply; import org.openflow.protocol.OFError; import org.openflow.protocol.OFError.OFBadActionCode; @@ -170,9 +172,9 @@ public class Controller protected List<RestletRoutable> restlets; - protected static final int REST_PORT = 8080; - protected static final int OPENFLOW_PORT = 6633; - + protected int restPort; + protected int openFlowPort; + protected static final String CONTROLLER_TABLE_NAME = "controller_controller"; protected static final String CONTROLLER_ID = "id"; @@ -213,6 +215,10 @@ public class Controller } public Controller() { + this(new PortSettings()); + } + + public Controller(PortSettings settings) { this.messageListeners = new ConcurrentHashMap<OFType, ListenerDispatcher<OFType, @@ -220,6 +226,8 @@ public class Controller this.switchListeners = new CopyOnWriteArraySet<IOFSwitchListener>(); this.updates = new LinkedBlockingQueue<Update>(); this.restlets = new ArrayList<RestletRoutable>(); + this.restPort = settings.getRestPort(); + this.openFlowPort = settings.getOpenFlowPort(); } // ********************** @@ -1311,7 +1319,7 @@ public class Controller try { // Start listening for REST requests final Component component = new Component(); - component.getServers().add(Protocol.HTTP, REST_PORT); + component.getServers().add(Protocol.HTTP, restPort); component.getDefaultHost().attach(this); component.start(); @@ -1341,7 +1349,7 @@ public class Controller ChannelPipelineFactory pfact = new OpenflowPipelineFactory(this, null); bootstrap.setPipelineFactory(pfact); - InetSocketAddress sa = new InetSocketAddress(OPENFLOW_PORT); + InetSocketAddress sa = new InetSocketAddress(openFlowPort); final ChannelGroup cg = new DefaultChannelGroup(); cg.add(bootstrap.bind(sa)); @@ -1470,8 +1478,17 @@ public class Controller public static void main(String args[]) throws Exception { System.setProperty("org.restlet.engine.loggerFacadeClass", "org.restlet.ext.slf4j.Slf4jLoggerFacade"); - - Controller controller = new Controller(); + + PortSettings settings = new PortSettings(); + CmdLineParser parser = new CmdLineParser(settings); + try { + parser.parseArgument(args); + } catch (CmdLineException e) { + parser.printUsage(System.out); + System.exit(1); + } + + Controller controller = new Controller(settings); controller.init(); controller.startupComponents(); controller.run(); diff --git a/src/main/java/net/floodlightcontroller/core/internal/PortSettings.java b/src/main/java/net/floodlightcontroller/core/internal/PortSettings.java new file mode 100644 index 0000000000000000000000000000000000000000..bfcea91df1131bab0a707c9839a1ea2c6b5faed2 --- /dev/null +++ b/src/main/java/net/floodlightcontroller/core/internal/PortSettings.java @@ -0,0 +1,24 @@ +package net.floodlightcontroller.core.internal; + +import org.kohsuke.args4j.Option; + +/** + * Expresses the port settings of OpenFlow controller. + */ +public class PortSettings { + private final int DEFAULT_OPENFLOW_PORT = 6633; + private final int DEFAULT_REST_PORT = 8080; + + @Option(name="-ofp", aliases="--openFlowPort",metaVar="PORT", usage="Port number for OpenFlow") + private int openFlowPort = DEFAULT_OPENFLOW_PORT; + @Option(name="-rp", aliases="--restPort", metaVar="PORT", usage="Port number for REST API") + private int restPort = DEFAULT_REST_PORT; + + public int getOpenFlowPort() { + return openFlowPort; + } + + public int getRestPort() { + return restPort; + } +}