sdn
Committed by Gerrit Code Review

Fix for ONOS-5033 hosts - dynamic or static

Change-Id: I3791370db0037968003abc23c918c63119d2dba2
...@@ -38,7 +38,7 @@ import static com.google.common.collect.Lists.newArrayList; ...@@ -38,7 +38,7 @@ import static com.google.common.collect.Lists.newArrayList;
38 public class HostsListCommand extends AbstractShellCommand { 38 public class HostsListCommand extends AbstractShellCommand {
39 39
40 private static final String FMT = 40 private static final String FMT =
41 - "id=%s, mac=%s, location=%s/%s, vlan=%s, ip(s)=%s%s"; 41 + "id=%s, mac=%s, location=%s/%s, vlan=%s, ip(s)=%s%s, configured=%s";
42 42
43 private static final String FMT_SHORT = 43 private static final String FMT_SHORT =
44 "id=%s, mac=%s, location=%s/%s, vlan=%s, ip(s)=%s"; 44 "id=%s, mac=%s, location=%s/%s, vlan=%s, ip(s)=%s";
...@@ -93,7 +93,9 @@ public class HostsListCommand extends AbstractShellCommand { ...@@ -93,7 +93,9 @@ public class HostsListCommand extends AbstractShellCommand {
93 } else { 93 } else {
94 print(FMT, host.id(), host.mac(), 94 print(FMT, host.id(), host.mac(),
95 host.location().deviceId(), host.location().port(), 95 host.location().deviceId(), host.location().port(),
96 - host.vlan(), host.ipAddresses(), annotations(host.annotations())); 96 + host.vlan(), host.ipAddresses(), annotations(host.annotations()),
97 + host.configured());
97 } 98 }
98 } 99 }
99 } 100 }
101 +
......
...@@ -36,6 +36,7 @@ public class DefaultHost extends AbstractElement implements Host { ...@@ -36,6 +36,7 @@ public class DefaultHost extends AbstractElement implements Host {
36 private final VlanId vlan; 36 private final VlanId vlan;
37 private final HostLocation location; 37 private final HostLocation location;
38 private final Set<IpAddress> ips; 38 private final Set<IpAddress> ips;
39 + private final boolean configured;
39 40
40 /** 41 /**
41 * Creates an end-station host using the supplied information. 42 * Creates an end-station host using the supplied information.
...@@ -51,11 +52,30 @@ public class DefaultHost extends AbstractElement implements Host { ...@@ -51,11 +52,30 @@ public class DefaultHost extends AbstractElement implements Host {
51 public DefaultHost(ProviderId providerId, HostId id, MacAddress mac, 52 public DefaultHost(ProviderId providerId, HostId id, MacAddress mac,
52 VlanId vlan, HostLocation location, Set<IpAddress> ips, 53 VlanId vlan, HostLocation location, Set<IpAddress> ips,
53 Annotations... annotations) { 54 Annotations... annotations) {
55 + this(providerId, id, mac, vlan, location, ips, false, annotations);
56 + }
57 +
58 + /**
59 + * Creates an end-station host using the supplied information.
60 + *
61 + * @param providerId provider identity
62 + * @param id host identifier
63 + * @param mac host MAC address
64 + * @param vlan host VLAN identifier
65 + * @param location host location
66 + * @param ips host IP addresses
67 + * @param configured true if configured via NetworkConfiguration
68 + * @param annotations optional key/value annotations
69 + */
70 + public DefaultHost(ProviderId providerId, HostId id, MacAddress mac,
71 + VlanId vlan, HostLocation location, Set<IpAddress> ips,
72 + boolean configured, Annotations... annotations) {
54 super(providerId, id, annotations); 73 super(providerId, id, annotations);
55 this.mac = mac; 74 this.mac = mac;
56 this.vlan = vlan; 75 this.vlan = vlan;
57 this.location = location; 76 this.location = location;
58 this.ips = new HashSet<>(ips); 77 this.ips = new HashSet<>(ips);
78 + this.configured = configured;
59 } 79 }
60 80
61 @Override 81 @Override
...@@ -84,6 +104,11 @@ public class DefaultHost extends AbstractElement implements Host { ...@@ -84,6 +104,11 @@ public class DefaultHost extends AbstractElement implements Host {
84 } 104 }
85 105
86 @Override 106 @Override
107 + public boolean configured() {
108 + return configured;
109 + }
110 +
111 + @Override
87 public int hashCode() { 112 public int hashCode() {
88 return Objects.hash(id, mac, vlan, location); 113 return Objects.hash(id, mac, vlan, location);
89 } 114 }
...@@ -114,6 +139,7 @@ public class DefaultHost extends AbstractElement implements Host { ...@@ -114,6 +139,7 @@ public class DefaultHost extends AbstractElement implements Host {
114 .add("location", location()) 139 .add("location", location())
115 .add("ipAddresses", ipAddresses()) 140 .add("ipAddresses", ipAddresses())
116 .add("annotations", annotations()) 141 .add("annotations", annotations())
142 + .add("configured", configured())
117 .toString(); 143 .toString();
118 } 144 }
119 145
......
...@@ -63,6 +63,14 @@ public interface Host extends Element { ...@@ -63,6 +63,14 @@ public interface Host extends Element {
63 */ 63 */
64 HostLocation location(); 64 HostLocation location();
65 65
66 + /**
67 + * Returns true if configured by NetworkConfiguration.
68 + * @return configured/learnt dynamically
69 + */
70 + default boolean configured() {
71 + return false;
72 + }
66 // TODO: explore capturing list of recent locations to aid in mobility 73 // TODO: explore capturing list of recent locations to aid in mobility
67 74
68 } 75 }
76 +
......
...@@ -40,6 +40,7 @@ public class DefaultHostDescription extends AbstractDescription ...@@ -40,6 +40,7 @@ public class DefaultHostDescription extends AbstractDescription
40 private final VlanId vlan; 40 private final VlanId vlan;
41 private final HostLocation location; 41 private final HostLocation location;
42 private final Set<IpAddress> ip; 42 private final Set<IpAddress> ip;
43 + private final boolean configured;
43 44
44 /** 45 /**
45 * Creates a host description using the supplied information. 46 * Creates a host description using the supplied information.
...@@ -83,11 +84,46 @@ public class DefaultHostDescription extends AbstractDescription ...@@ -83,11 +84,46 @@ public class DefaultHostDescription extends AbstractDescription
83 public DefaultHostDescription(MacAddress mac, VlanId vlan, 84 public DefaultHostDescription(MacAddress mac, VlanId vlan,
84 HostLocation location, Set<IpAddress> ip, 85 HostLocation location, Set<IpAddress> ip,
85 SparseAnnotations... annotations) { 86 SparseAnnotations... annotations) {
87 + this(mac, vlan, location, ip, false, annotations);
88 + }
89 +
90 + /**
91 + * Creates a host description using the supplied information.
92 + *
93 + * @param mac host MAC address
94 + * @param vlan host VLAN identifier
95 + * @param location host location
96 + * @param configured true if configured via NetworkConfiguration
97 + * @param annotations optional key/value annotations map
98 + */
99 + public DefaultHostDescription(MacAddress mac, VlanId vlan,
100 + HostLocation location,
101 + boolean configured,
102 + SparseAnnotations... annotations) {
103 + this(mac, vlan, location, Collections.<IpAddress>emptySet(),
104 + configured, annotations);
105 + }
106 +
107 + /**
108 + * Creates a host description using the supplied information.
109 + *
110 + * @param mac host MAC address
111 + * @param vlan host VLAN identifier
112 + * @param location host location
113 + * @param ip host IP address
114 + * @param configured true if configured via NetworkConfiguration
115 + * @param annotations optional key/value annotations map
116 + */
117 + public DefaultHostDescription(MacAddress mac, VlanId vlan,
118 + HostLocation location, Set<IpAddress> ip,
119 + boolean configured,
120 + SparseAnnotations... annotations) {
86 super(annotations); 121 super(annotations);
87 this.mac = mac; 122 this.mac = mac;
88 this.vlan = vlan; 123 this.vlan = vlan;
89 this.location = location; 124 this.location = location;
90 this.ip = ImmutableSet.copyOf(ip); 125 this.ip = ImmutableSet.copyOf(ip);
126 + this.configured = configured;
91 } 127 }
92 128
93 @Override 129 @Override
...@@ -111,12 +147,18 @@ public class DefaultHostDescription extends AbstractDescription ...@@ -111,12 +147,18 @@ public class DefaultHostDescription extends AbstractDescription
111 } 147 }
112 148
113 @Override 149 @Override
150 + public boolean configured() {
151 + return configured;
152 + }
153 +
154 + @Override
114 public String toString() { 155 public String toString() {
115 return toStringHelper(this) 156 return toStringHelper(this)
116 .add("mac", mac) 157 .add("mac", mac)
117 .add("vlan", vlan) 158 .add("vlan", vlan)
118 .add("location", location) 159 .add("location", location)
119 .add("ipAddress", ip) 160 .add("ipAddress", ip)
161 + .add("configured", configured)
120 .toString(); 162 .toString();
121 } 163 }
122 164
...@@ -139,5 +181,4 @@ public class DefaultHostDescription extends AbstractDescription ...@@ -139,5 +181,4 @@ public class DefaultHostDescription extends AbstractDescription
139 } 181 }
140 return false; 182 return false;
141 } 183 }
142 -
143 } 184 }
......
...@@ -55,4 +55,12 @@ public interface HostDescription extends Description { ...@@ -55,4 +55,12 @@ public interface HostDescription extends Description {
55 * @return host IP address 55 * @return host IP address
56 */ 56 */
57 Set<IpAddress> ipAddress(); 57 Set<IpAddress> ipAddress();
58 +
59 + /**
60 + * Returns true if configured by NetworkConfiguration.
61 + * @return configured/learnt dynamically
62 + */
63 + default boolean configured() {
64 + return false;
65 + }
58 } 66 }
......
...@@ -39,7 +39,8 @@ public final class HostCodec extends AnnotatedCodec<Host> { ...@@ -39,7 +39,8 @@ public final class HostCodec extends AnnotatedCodec<Host> {
39 final ObjectNode result = context.mapper().createObjectNode() 39 final ObjectNode result = context.mapper().createObjectNode()
40 .put("id", host.id().toString()) 40 .put("id", host.id().toString())
41 .put("mac", host.mac().toString()) 41 .put("mac", host.mac().toString())
42 - .put("vlan", host.vlan().toString()); 42 + .put("vlan", host.vlan().toString())
43 + .put("configured", host.configured());
43 44
44 final ArrayNode jsonIpAddresses = result.putArray("ipAddresses"); 45 final ArrayNode jsonIpAddresses = result.putArray("ipAddresses");
45 for (final IpAddress ipAddress : host.ipAddresses()) { 46 for (final IpAddress ipAddress : host.ipAddresses()) {
......
...@@ -64,7 +64,7 @@ public final class BasicHostOperator implements ConfigOperator { ...@@ -64,7 +64,7 @@ public final class BasicHostOperator implements ConfigOperator {
64 64
65 SparseAnnotations sa = combine(cfg, descr.annotations()); 65 SparseAnnotations sa = combine(cfg, descr.annotations());
66 return new DefaultHostDescription(descr.hwAddress(), descr.vlan(), 66 return new DefaultHostDescription(descr.hwAddress(), descr.vlan(),
67 - location, ipAddresses, sa); 67 + location, ipAddresses, descr.configured(), sa);
68 } 68 }
69 69
70 /** 70 /**
......
...@@ -167,11 +167,14 @@ public class DistributedHostStore ...@@ -167,11 +167,14 @@ public class DistributedHostStore
167 } 167 }
168 168
169 final Annotations annotations; 169 final Annotations annotations;
170 + final boolean configured;
170 if (existingHost != null) { 171 if (existingHost != null) {
171 annotations = merge((DefaultAnnotations) existingHost.annotations(), 172 annotations = merge((DefaultAnnotations) existingHost.annotations(),
172 hostDescription.annotations()); 173 hostDescription.annotations());
174 + configured = existingHost.configured();
173 } else { 175 } else {
174 annotations = hostDescription.annotations(); 176 annotations = hostDescription.annotations();
177 + configured = hostDescription.configured();
175 } 178 }
176 179
177 return new DefaultHost(providerId, 180 return new DefaultHost(providerId,
...@@ -180,6 +183,7 @@ public class DistributedHostStore ...@@ -180,6 +183,7 @@ public class DistributedHostStore
180 hostDescription.vlan(), 183 hostDescription.vlan(),
181 location, 184 location,
182 addresses, 185 addresses,
186 + configured,
183 annotations); 187 annotations);
184 }); 188 });
185 return null; 189 return null;
......
...@@ -112,8 +112,8 @@ public class NetworkConfigHostProvider extends AbstractProvider implements HostP ...@@ -112,8 +112,8 @@ public class NetworkConfigHostProvider extends AbstractProvider implements HostP
112 protected void addHost(MacAddress mac, VlanId vlan, HostLocation hloc, Set<IpAddress> ips) { 112 protected void addHost(MacAddress mac, VlanId vlan, HostLocation hloc, Set<IpAddress> ips) {
113 HostId hid = HostId.hostId(mac, vlan); 113 HostId hid = HostId.hostId(mac, vlan);
114 HostDescription desc = (ips != null) ? 114 HostDescription desc = (ips != null) ?
115 - new DefaultHostDescription(mac, vlan, hloc, ips) : 115 + new DefaultHostDescription(mac, vlan, hloc, ips, true) :
116 - new DefaultHostDescription(mac, vlan, hloc); 116 + new DefaultHostDescription(mac, vlan, hloc, true);
117 providerService.hostDetected(hid, desc, false); 117 providerService.hostDetected(hid, desc, false);
118 } 118 }
119 119
...@@ -128,7 +128,7 @@ public class NetworkConfigHostProvider extends AbstractProvider implements HostP ...@@ -128,7 +128,7 @@ public class NetworkConfigHostProvider extends AbstractProvider implements HostP
128 */ 128 */
129 protected void updateHost(MacAddress mac, VlanId vlan, HostLocation hloc, Set<IpAddress> ips) { 129 protected void updateHost(MacAddress mac, VlanId vlan, HostLocation hloc, Set<IpAddress> ips) {
130 HostId hid = HostId.hostId(mac, vlan); 130 HostId hid = HostId.hostId(mac, vlan);
131 - HostDescription desc = new DefaultHostDescription(mac, vlan, hloc, ips); 131 + HostDescription desc = new DefaultHostDescription(mac, vlan, hloc, ips, true);
132 providerService.hostDetected(hid, desc, true); 132 providerService.hostDetected(hid, desc, true);
133 } 133 }
134 134
......
...@@ -214,7 +214,7 @@ public class HostsWebResource extends AbstractWebResource { ...@@ -214,7 +214,7 @@ public class HostsWebResource extends AbstractWebResource {
214 // Update host inventory 214 // Update host inventory
215 215
216 HostId hostId = HostId.hostId(mac, vlanId); 216 HostId hostId = HostId.hostId(mac, vlanId);
217 - DefaultHostDescription desc = new DefaultHostDescription(mac, vlanId, hostLocation, ips, annotations); 217 + DefaultHostDescription desc = new DefaultHostDescription(mac, vlanId, hostLocation, ips, true, annotations);
218 hostProviderService.hostDetected(hostId, desc, false); 218 hostProviderService.hostDetected(hostId, desc, false);
219 return hostId; 219 return hostId;
220 } 220 }
......
...@@ -198,7 +198,7 @@ public class HostResourceTest extends ResourceTest { ...@@ -198,7 +198,7 @@ public class HostResourceTest extends ResourceTest {
198 @Override 198 @Override
199 public boolean matchesSafely(JsonArray json) { 199 public boolean matchesSafely(JsonArray json) {
200 boolean hostFound = false; 200 boolean hostFound = false;
201 - final int expectedAttributes = 5; 201 + final int expectedAttributes = 6;
202 for (int jsonHostIndex = 0; jsonHostIndex < json.size(); 202 for (int jsonHostIndex = 0; jsonHostIndex < json.size();
203 jsonHostIndex++) { 203 jsonHostIndex++) {
204 204
......