Showing
10 changed files
with
271 additions
and
0 deletions
apps/config/pom.xml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<project xmlns="http://maven.apache.org/POM/4.0.0" | ||
3 | + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
4 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | ||
5 | + <modelVersion>4.0.0</modelVersion> | ||
6 | + | ||
7 | + <parent> | ||
8 | + <groupId>org.onlab.onos</groupId> | ||
9 | + <artifactId>onos-apps</artifactId> | ||
10 | + <version>1.0.0-SNAPSHOT</version> | ||
11 | + <relativePath>../pom.xml</relativePath> | ||
12 | + </parent> | ||
13 | + | ||
14 | + <artifactId>onos-app-config</artifactId> | ||
15 | + <packaging>bundle</packaging> | ||
16 | + | ||
17 | + <description>ONOS simple network configuration reader</description> | ||
18 | + | ||
19 | + <dependencies> | ||
20 | + <dependency> | ||
21 | + <groupId>org.codehaus.jackson</groupId> | ||
22 | + <artifactId>jackson-core-asl</artifactId> | ||
23 | + </dependency> | ||
24 | + <dependency> | ||
25 | + <groupId>org.codehaus.jackson</groupId> | ||
26 | + <artifactId>jackson-mapper-asl</artifactId> | ||
27 | + </dependency> | ||
28 | + <dependency> | ||
29 | + <groupId>com.fasterxml.jackson.core</groupId> | ||
30 | + <artifactId>jackson-annotations</artifactId> | ||
31 | + <version>2.4.2</version> | ||
32 | + <scope>provided</scope> | ||
33 | + </dependency> | ||
34 | + </dependencies> | ||
35 | + | ||
36 | +</project> |
1 | +package org.onlab.onos.config; | ||
2 | + | ||
3 | +import java.util.Collections; | ||
4 | +import java.util.List; | ||
5 | + | ||
6 | +import org.codehaus.jackson.annotate.JsonProperty; | ||
7 | + | ||
8 | +/** | ||
9 | + * Object to store address configuration read from a JSON file. | ||
10 | + */ | ||
11 | +public class AddressConfiguration { | ||
12 | + | ||
13 | + private List<AddressEntry> addresses; | ||
14 | + | ||
15 | + /** | ||
16 | + * Gets a list of addresses in the system. | ||
17 | + * | ||
18 | + * @return the list of addresses | ||
19 | + */ | ||
20 | + public List<AddressEntry> getAddresses() { | ||
21 | + return Collections.unmodifiableList(addresses); | ||
22 | + } | ||
23 | + | ||
24 | + /** | ||
25 | + * Sets a list of addresses in the system. | ||
26 | + * | ||
27 | + * @param addresses the list of addresses | ||
28 | + */ | ||
29 | + @JsonProperty("addresses") | ||
30 | + public void setAddresses(List<AddressEntry> addresses) { | ||
31 | + this.addresses = addresses; | ||
32 | + } | ||
33 | + | ||
34 | +} |
1 | +package org.onlab.onos.config; | ||
2 | + | ||
3 | +import java.util.List; | ||
4 | + | ||
5 | +import org.codehaus.jackson.annotate.JsonProperty; | ||
6 | +import org.onlab.packet.IpPrefix; | ||
7 | +import org.onlab.packet.MacAddress; | ||
8 | + | ||
9 | +/** | ||
10 | + * Represents a set of addresses bound to a port. | ||
11 | + */ | ||
12 | +public class AddressEntry { | ||
13 | + private String dpid; | ||
14 | + private short portNumber; | ||
15 | + private List<IpPrefix> ipAddresses; | ||
16 | + private MacAddress macAddress; | ||
17 | + | ||
18 | + public String getDpid() { | ||
19 | + return dpid; | ||
20 | + } | ||
21 | + | ||
22 | + @JsonProperty("dpid") | ||
23 | + public void setDpid(String strDpid) { | ||
24 | + this.dpid = strDpid; | ||
25 | + } | ||
26 | + | ||
27 | + public short getPortNumber() { | ||
28 | + return portNumber; | ||
29 | + } | ||
30 | + | ||
31 | + @JsonProperty("port") | ||
32 | + public void setPortNumber(short portNumber) { | ||
33 | + this.portNumber = portNumber; | ||
34 | + } | ||
35 | + | ||
36 | + public List<IpPrefix> getIpAddresses() { | ||
37 | + return ipAddresses; | ||
38 | + } | ||
39 | + | ||
40 | + @JsonProperty("ips") | ||
41 | + public void setIpAddresses(List<IpPrefix> ipAddresses) { | ||
42 | + this.ipAddresses = ipAddresses; | ||
43 | + } | ||
44 | + | ||
45 | + public MacAddress getMacAddress() { | ||
46 | + return macAddress; | ||
47 | + } | ||
48 | + | ||
49 | + @JsonProperty("mac") | ||
50 | + public void setMacAddress(MacAddress macAddress) { | ||
51 | + this.macAddress = macAddress; | ||
52 | + } | ||
53 | +} |
1 | +package org.onlab.onos.config; | ||
2 | + | ||
3 | +import static org.slf4j.LoggerFactory.getLogger; | ||
4 | + | ||
5 | +import java.io.File; | ||
6 | +import java.io.FileNotFoundException; | ||
7 | +import java.io.IOException; | ||
8 | + | ||
9 | +import org.apache.felix.scr.annotations.Activate; | ||
10 | +import org.apache.felix.scr.annotations.Component; | ||
11 | +import org.apache.felix.scr.annotations.Deactivate; | ||
12 | +import org.apache.felix.scr.annotations.Reference; | ||
13 | +import org.apache.felix.scr.annotations.ReferenceCardinality; | ||
14 | +import org.codehaus.jackson.map.ObjectMapper; | ||
15 | +import org.onlab.onos.net.ConnectPoint; | ||
16 | +import org.onlab.onos.net.DeviceId; | ||
17 | +import org.onlab.onos.net.PortNumber; | ||
18 | +import org.onlab.onos.net.host.HostAdminService; | ||
19 | +import org.onlab.onos.net.host.PortAddresses; | ||
20 | +import org.slf4j.Logger; | ||
21 | + | ||
22 | +import com.google.common.collect.Sets; | ||
23 | + | ||
24 | +/** | ||
25 | + * Simple configuration module to read in supplementary network configuration | ||
26 | + * from a file. | ||
27 | + */ | ||
28 | +@Component(immediate = true) | ||
29 | +public class NetworkConfigReader { | ||
30 | + | ||
31 | + private final Logger log = getLogger(getClass()); | ||
32 | + | ||
33 | + private static final String DEFAULT_CONFIG_FILE = "config/addresses.json"; | ||
34 | + private String configFileName = DEFAULT_CONFIG_FILE; | ||
35 | + | ||
36 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
37 | + protected HostAdminService hostAdminService; | ||
38 | + | ||
39 | + @Activate | ||
40 | + protected void activate() { | ||
41 | + log.info("Started network config reader"); | ||
42 | + | ||
43 | + log.info("Config file set to {}", configFileName); | ||
44 | + | ||
45 | + AddressConfiguration config = readNetworkConfig(); | ||
46 | + | ||
47 | + if (config != null) { | ||
48 | + for (AddressEntry entry : config.getAddresses()) { | ||
49 | + | ||
50 | + ConnectPoint cp = new ConnectPoint( | ||
51 | + DeviceId.deviceId(dpidToUri(entry.getDpid())), | ||
52 | + PortNumber.portNumber(entry.getPortNumber())); | ||
53 | + | ||
54 | + PortAddresses addresses = new PortAddresses(cp, | ||
55 | + Sets.newHashSet(entry.getIpAddresses()), | ||
56 | + entry.getMacAddress()); | ||
57 | + | ||
58 | + hostAdminService.bindAddressesToPort(addresses); | ||
59 | + } | ||
60 | + } | ||
61 | + } | ||
62 | + | ||
63 | + @Deactivate | ||
64 | + protected void deactivate() { | ||
65 | + log.info("Stopped"); | ||
66 | + } | ||
67 | + | ||
68 | + private AddressConfiguration readNetworkConfig() { | ||
69 | + File configFile = new File(configFileName); | ||
70 | + | ||
71 | + ObjectMapper mapper = new ObjectMapper(); | ||
72 | + | ||
73 | + try { | ||
74 | + AddressConfiguration config = | ||
75 | + mapper.readValue(configFile, AddressConfiguration.class); | ||
76 | + | ||
77 | + return config; | ||
78 | + } catch (FileNotFoundException e) { | ||
79 | + log.warn("Configuration file not found: {}", configFileName); | ||
80 | + } catch (IOException e) { | ||
81 | + log.error("Unable to read config from file:", e); | ||
82 | + } | ||
83 | + | ||
84 | + return null; | ||
85 | + } | ||
86 | + | ||
87 | + private static String dpidToUri(String dpid) { | ||
88 | + return "of:" + dpid.replace(":", ""); | ||
89 | + } | ||
90 | +} |
apps/config/src/main/resources/config.json
0 → 100644
1 | +{ | ||
2 | + "interfaces" : [ | ||
3 | + { | ||
4 | + "dpid" : "00:00:00:00:00:00:01", | ||
5 | + "port" : "1", | ||
6 | + "ips" : ["192.168.10.101/24"], | ||
7 | + "mac" : "00:00:00:11:22:33" | ||
8 | + }, | ||
9 | + { | ||
10 | + "dpid" : "00:00:00:00:00:00:02", | ||
11 | + "port" : "1", | ||
12 | + "ips" : ["192.168.20.101/24", "192.168.30.101/24"] | ||
13 | + }, | ||
14 | + { | ||
15 | + "dpid" : "00:00:00:00:00:00:03", | ||
16 | + "port" : "1", | ||
17 | + "ips" : ["10.1.0.1/16"], | ||
18 | + "mac" : "00:00:00:00:00:01" | ||
19 | + } | ||
20 | + ] | ||
21 | +} |
... | @@ -9,6 +9,8 @@ import org.onlab.onos.net.ConnectPoint; | ... | @@ -9,6 +9,8 @@ import org.onlab.onos.net.ConnectPoint; |
9 | import org.onlab.packet.IpPrefix; | 9 | import org.onlab.packet.IpPrefix; |
10 | import org.onlab.packet.MacAddress; | 10 | import org.onlab.packet.MacAddress; |
11 | 11 | ||
12 | +import com.google.common.base.MoreObjects; | ||
13 | + | ||
12 | /** | 14 | /** |
13 | * Represents address information bound to a port. | 15 | * Represents address information bound to a port. |
14 | */ | 16 | */ |
... | @@ -83,4 +85,13 @@ public class PortAddresses { | ... | @@ -83,4 +85,13 @@ public class PortAddresses { |
83 | public int hashCode() { | 85 | public int hashCode() { |
84 | return Objects.hash(connectPoint, ipAddresses, macAddress); | 86 | return Objects.hash(connectPoint, ipAddresses, macAddress); |
85 | } | 87 | } |
88 | + | ||
89 | + @Override | ||
90 | + public String toString() { | ||
91 | + return MoreObjects.toStringHelper(getClass()) | ||
92 | + .add("connect-point", connectPoint) | ||
93 | + .add("ip-addresses", ipAddresses) | ||
94 | + .add("mac-address", macAddress) | ||
95 | + .toString(); | ||
96 | + } | ||
86 | } | 97 | } | ... | ... |
... | @@ -19,6 +19,9 @@ | ... | @@ -19,6 +19,9 @@ |
19 | <bundle>mvn:de.javakaffee/kryo-serializers/0.27</bundle> | 19 | <bundle>mvn:de.javakaffee/kryo-serializers/0.27</bundle> |
20 | 20 | ||
21 | <bundle>mvn:org.onlab.onos/onlab-nio/1.0.0-SNAPSHOT</bundle> | 21 | <bundle>mvn:org.onlab.onos/onlab-nio/1.0.0-SNAPSHOT</bundle> |
22 | + | ||
23 | + <bundle>mvn:org.codehaus.jackson/jackson-core-asl/1.9.13</bundle> | ||
24 | + <bundle>mvn:org.codehaus.jackson/jackson-mapper-asl/1.9.13</bundle> | ||
22 | </feature> | 25 | </feature> |
23 | 26 | ||
24 | <feature name="onos-thirdparty-web" version="1.0.0" | 27 | <feature name="onos-thirdparty-web" version="1.0.0" |
... | @@ -122,4 +125,10 @@ | ... | @@ -122,4 +125,10 @@ |
122 | <bundle>mvn:org.onlab.onos/onos-app-foo/1.0.0-SNAPSHOT</bundle> | 125 | <bundle>mvn:org.onlab.onos/onos-app-foo/1.0.0-SNAPSHOT</bundle> |
123 | </feature> | 126 | </feature> |
124 | 127 | ||
128 | + <feature name="onos-app-config" version="1.0.0" | ||
129 | + description="ONOS network config reader"> | ||
130 | + <feature>onos-api</feature> | ||
131 | + <bundle>mvn:org.onlab.onos/onos-app-config/1.0.0-SNAPSHOT</bundle> | ||
132 | + </feature> | ||
133 | + | ||
125 | </features> | 134 | </features> | ... | ... |
... | @@ -92,6 +92,17 @@ | ... | @@ -92,6 +92,17 @@ |
92 | <version>3.3.2</version> | 92 | <version>3.3.2</version> |
93 | </dependency> | 93 | </dependency> |
94 | 94 | ||
95 | + <dependency> | ||
96 | + <groupId>org.codehaus.jackson</groupId> | ||
97 | + <artifactId>jackson-core-asl</artifactId> | ||
98 | + <version>1.9.13</version> | ||
99 | + </dependency> | ||
100 | + <dependency> | ||
101 | + <groupId>org.codehaus.jackson</groupId> | ||
102 | + <artifactId>jackson-mapper-asl</artifactId> | ||
103 | + <version>1.9.13</version> | ||
104 | + </dependency> | ||
105 | + | ||
95 | 106 | ||
96 | <!-- Web related --> | 107 | <!-- Web related --> |
97 | <dependency> | 108 | <dependency> | ... | ... |
-
Please register or login to post a comment