aboutsummaryrefslogtreecommitdiffstats
path: root/framework
diff options
context:
space:
mode:
authorAshlee Young <ashlee@onosfw.com>2015-09-22 12:49:09 -0700
committerAshlee Young <ashlee@onosfw.com>2015-09-22 12:49:09 -0700
commit81391595dca425ae58e2294898f09f11d9a32dbc (patch)
treef5d65c39a732150b2b29daa8de98a35d1236d3fb /framework
parent0aa37e73dcb3a55b8d889b0c32ff74055551b1f3 (diff)
bringing src to commit tag 65d551b50e782b0c1ea76c1a9ed1c5a801a5a7e4
Change-Id: Ib2da78962eaef856f418636c31b0f5c84286244f
Diffstat (limited to 'framework')
-rw-r--r--framework/src/onos/apps/aaa/pom.xml2
-rw-r--r--framework/src/onos/apps/acl/pom.xml6
-rw-r--r--framework/src/onos/apps/acl/src/main/java/org/onos/acl/impl/DistributedAclStore.java4
-rw-r--r--framework/src/onos/apps/acl/src/main/java/org/onos/acl/impl/package-info.java20
-rw-r--r--framework/src/onos/apps/acl/src/main/java/org/onos/acl/package-info.java20
-rw-r--r--framework/src/onos/apps/bgprouter/app.xml1
-rw-r--r--framework/src/onos/apps/bgprouter/features.xml1
-rw-r--r--framework/src/onos/apps/bgprouter/pom.xml8
-rw-r--r--framework/src/onos/apps/cip/pom.xml2
-rw-r--r--framework/src/onos/apps/cip/src/main/java/org/onosproject/cip/package-info.java21
-rw-r--r--framework/src/onos/apps/cordfabric/pom.xml2
-rw-r--r--framework/src/onos/apps/cordvtn/pom.xml54
-rw-r--r--framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/ConnectionHandler.java36
-rw-r--r--framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtn.java311
-rw-r--r--framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnConfig.java101
-rw-r--r--framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnService.java57
-rw-r--r--framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/DefaultOvsdbNode.java97
-rw-r--r--framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/NodeConnectionManager.java145
-rw-r--r--framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/OvsdbNode.java74
-rw-r--r--framework/src/onos/apps/demo/cord-gui/pom.xml2
-rw-r--r--framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunctionFactory.java15
-rw-r--r--framework/src/onos/apps/demo/cord-gui/src/scripts/pullwar.sh2
-rw-r--r--framework/src/onos/apps/demo/cord-gui/src/scripts/run.me2
-rw-r--r--framework/src/onos/apps/dhcp/pom.xml2
-rw-r--r--framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/DhcpService.java3
-rw-r--r--framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/DhcpStore.java23
-rw-r--r--framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/IpAssignment.java19
-rw-r--r--framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/cli/DhcpListAllMappings.java6
-rw-r--r--framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/cli/package-info.java20
-rw-r--r--framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpConfig.java148
-rw-r--r--framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java214
-rw-r--r--framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpViewMessageHandler.java19
-rw-r--r--framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DistributedDhcpStore.java186
-rw-r--r--framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/package-info.java20
-rw-r--r--framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/package-info.java20
-rw-r--r--framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/rest/DHCPWebResource.java13
-rw-r--r--framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/rest/package-info.java20
-rw-r--r--framework/src/onos/apps/dhcp/src/main/resources/app/view/dhcp/dhcp.html8
-rw-r--r--framework/src/onos/apps/dhcp/src/test/java/org/onosproject/dhcp/IpAssignmentTest.java5
-rw-r--r--framework/src/onos/apps/dhcp/src/test/java/org/onosproject/dhcp/impl/DhcpManagerTest.java25
-rw-r--r--framework/src/onos/apps/dhcp/src/test/resources/dhcp-cfg.json4
-rw-r--r--framework/src/onos/apps/flowanalyzer/pom.xml2
-rw-r--r--framework/src/onos/apps/fwd/pom.xml2
-rw-r--r--framework/src/onos/apps/metrics/pom.xml2
-rw-r--r--framework/src/onos/apps/metrics/src/main/java/org/onosproject/metrics/intent/IntentMetrics.java2
-rw-r--r--framework/src/onos/apps/metrics/src/main/java/org/onosproject/metrics/topology/TopologyMetrics.java2
-rw-r--r--framework/src/onos/apps/mobility/pom.xml2
-rw-r--r--framework/src/onos/apps/olt/pom.xml2
-rw-r--r--framework/src/onos/apps/optical/pom.xml2
-rw-r--r--framework/src/onos/apps/optical/src/main/java/org/onosproject/optical/cfg/OpticalNetworkConfig.java4
-rw-r--r--framework/src/onos/apps/pcep-api/pom.xml37
-rw-r--r--framework/src/onos/apps/pom.xml6
-rw-r--r--framework/src/onos/apps/proxyarp/pom.xml2
-rw-r--r--framework/src/onos/apps/proxyarp/src/main/java/org/onosproject/proxyarp/ProxyArp.java6
-rw-r--r--framework/src/onos/apps/reactive-routing/pom.xml2
-rw-r--r--framework/src/onos/apps/routing-api/pom.xml2
-rw-r--r--framework/src/onos/apps/routing-api/src/main/java/org/onosproject/routing/config/Interface.java13
-rw-r--r--framework/src/onos/apps/routing/pom.xml2
-rw-r--r--framework/src/onos/apps/routing/src/main/java/org/onosproject/routing/bgp/BgpSessionManager.java27
-rw-r--r--framework/src/onos/apps/routing/src/main/java/org/onosproject/routing/config/impl/RoutingConfigurationImpl.java14
-rw-r--r--framework/src/onos/apps/routing/src/main/java/org/onosproject/routing/impl/Router.java7
-rw-r--r--framework/src/onos/apps/routing/src/test/java/org/onosproject/routing/bgp/BgpSessionManagerTest.java22
-rw-r--r--framework/src/onos/apps/sdnip/pom.xml8
-rw-r--r--framework/src/onos/apps/sdnip/src/main/java/org/onosproject/sdnip/IntentSynchronizer.java2
-rw-r--r--framework/src/onos/apps/segmentrouting/pom.xml2
-rw-r--r--framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/DeviceConfiguration.java25
-rw-r--r--framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/ECMPShortestPathGraph.java26
-rw-r--r--framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/IpHandler.java4
-rw-r--r--framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/RoutingRulePopulator.java2
-rw-r--r--framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfig.java19
-rw-r--r--framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigException.java15
-rw-r--r--framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigManager.java29
-rw-r--r--framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigService.java15
-rw-r--r--framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/PktLinkConfig.java17
-rw-r--r--framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/SegmentRouterConfig.java23
-rw-r--r--framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultEdgeGroupHandler.java6
-rw-r--r--framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultGroupHandler.java16
-rw-r--r--framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultTransitGroupHandler.java8
-rw-r--r--framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/NeighborSet.java6
-rw-r--r--framework/src/onos/apps/test/demo/pom.xml2
-rw-r--r--framework/src/onos/apps/test/demo/src/main/java/org/onosproject/demo/DemoAPI.java2
-rw-r--r--framework/src/onos/apps/test/demo/src/main/java/org/onosproject/demo/DemoInstaller.java9
-rw-r--r--framework/src/onos/apps/test/distributed-primitives/pom.xml4
-rw-r--r--framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/CounterTestIncrementCommand.java4
-rw-r--r--framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/SetTestAddCommand.java2
-rw-r--r--framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/SetTestGetCommand.java4
-rw-r--r--framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/SetTestRemoveCommand.java2
-rw-r--r--framework/src/onos/apps/test/election/pom.xml2
-rw-r--r--framework/src/onos/apps/test/intent-perf/pom.xml2
-rw-r--r--framework/src/onos/apps/test/messaging-perf/pom.xml2
-rw-r--r--framework/src/onos/apps/test/messaging-perf/src/main/java/org/onosproject/messagingperf/MessagingPerfApp.java15
-rw-r--r--framework/src/onos/apps/test/pom.xml2
-rw-r--r--framework/src/onos/apps/virtualbng/pom.xml2
-rw-r--r--framework/src/onos/apps/vtn/pom.xml26
-rw-r--r--framework/src/onos/apps/vtn/src/main/java/org/onosproject/vtn/impl/VTNManager.java46
-rw-r--r--framework/src/onos/apps/vtnrsc/pom.xml17
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/AllocationPool.java76
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/AllowedAddressPair.java188
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/BindingHostId.java129
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultAllocationPool.java162
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultHostRoute.java158
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultSubnet.java366
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultTenantNetwork.java320
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultVirtualPort.java458
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/FixedIp.java186
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/HostRoute.java78
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/PhysicalNetwork.java156
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/SecurityGroup.java154
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/SegmentationId.java154
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/Subnet.java258
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/SubnetId.java152
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/TenantId.java154
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/TenantNetwork.java260
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/TenantNetworkId.java152
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/VirtualPort.java312
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/VirtualPortId.java140
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/network/package-info.java20
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/SubnetUpdateCommand.java2
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/package-info.java20
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/virtualport/package-info.java20
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/SubnetService.java144
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/impl/SubnetManager.java362
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/impl/package-info.java20
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/package-info.java20
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/TenantNetworkService.java160
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/impl/TenantNetworkManager.java334
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/impl/package-info.java20
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/package-info.java20
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tunnel/TunnelConfigService.java144
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tunnel/package-info.java20
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/VirtualPortService.java200
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/impl/VirtualPortManager.java444
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/impl/package-info.java20
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/package-info.java20
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/AllocationPoolsCodec.java80
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/AllowedAddressPairCodec.java80
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/FixedIpCodec.java80
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/HostRoutesCodec.java80
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/SecurityGroupCodec.java78
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/SubnetCodec.java106
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/TenantNetworkCodec.java94
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/VirtualPortCodec.java114
-rw-r--r--framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/package-info.java20
-rw-r--r--framework/src/onos/apps/vtnweb/pom.xml150
-rw-r--r--framework/src/onos/apps/vtnweb/src/main/java/org/onosproject/vtnweb/resources/SubnetWebResource.java730
-rw-r--r--framework/src/onos/apps/vtnweb/src/main/java/org/onosproject/vtnweb/resources/TenantNetworkWebResource.java743
-rw-r--r--framework/src/onos/apps/vtnweb/src/main/java/org/onosproject/vtnweb/resources/VirtualPortWebResource.java820
-rw-r--r--framework/src/onos/apps/xos-integration/pom.xml2
-rw-r--r--framework/src/onos/cli/pom.xml2
-rw-r--r--framework/src/onos/cli/src/main/java/org/onosproject/cli/Comparators.java8
-rw-r--r--framework/src/onos/cli/src/main/java/org/onosproject/cli/MetricNameCompleter.java2
-rw-r--r--framework/src/onos/cli/src/main/java/org/onosproject/cli/cfg/NetworkConfigCommand.java12
-rw-r--r--framework/src/onos/cli/src/main/java/org/onosproject/cli/net/AddMplsIntent.java15
-rw-r--r--framework/src/onos/cli/src/main/java/org/onosproject/cli/net/LinkResourceTestCommand.java15
-rw-r--r--framework/src/onos/cli/src/main/java/org/onosproject/cli/net/PacketProcessorsListCommand.java59
-rw-r--r--framework/src/onos/cli/src/main/java/org/onosproject/cli/net/PacketRequestsListCommand.java47
-rw-r--r--framework/src/onos/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml10
-rw-r--r--framework/src/onos/core/api/pom.xml2
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/cluster/ClusterDefinitionService.java15
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/cluster/ControllerNode.java2
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/core/CoreService.java4
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/core/MetricsHelper.java2
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/Device.java2
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/IpElementId.java15
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicLinkConfig.java24
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/OpticalPortConfig.java15
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultFlowRule.java19
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java6
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleExtPayLoad.java15
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java2
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/TrafficSelector.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/MplsBosCriterion.java15
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/Objective.java6
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostAdminService.java34
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostProviderService.java15
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostService.java20
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostStore.java54
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsIntent.java15
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java15
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PathIntent.java9
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceStore.java15
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketPriority.java4
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProcessor.java14
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketService.java20
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketStore.java6
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/proxyarp/ProxyArpService.java2
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/security/AppGuard.java3
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/security/AppPermission.java3
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/security/Permission.java3
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/security/SecurityAdminService.java2
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/security/SecurityUtil.java2
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/store/service/DatabaseUpdate.java2
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiTopoOverlay.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiTopoOverlayFactory.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/CellComparator.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/CellFormatter.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AbstractCellComparator.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AbstractCellFormatter.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AppIdFormatter.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/ConnectPointFormatter.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/DefaultCellComparator.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/DefaultCellFormatter.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/HexFormatter.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/HostLocationFormatter.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/TimeFormatter.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/AbstractHighlight.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BaseLink.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BaseLinkMap.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BiLink.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BiLinkMap.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/ButtonId.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/Highlights.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/HostHighlight.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/LinkHighlight.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/Mod.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeHighlight.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeSelection.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/PropertyPanel.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoConstants.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoElementType.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java1
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoUtils.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/event/EventDeliveryServiceAdapter.java2
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/net/OchSignalTest.java2
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/net/device/DeviceClockServiceAdapter.java15
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/net/device/DeviceServiceAdapter.java9
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/net/flow/FlowRuleExtPayLoadTest.java15
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/net/host/HostServiceAdapter.java20
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/FakeIntentManager.java29
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java36
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/PartitionServiceAdapter.java2
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/net/link/LinkServiceAdapter.java9
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/net/packet/PacketServiceAdapter.java13
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/store/service/DatabaseUpdateTest.java5
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/store/service/MapEventTest.java5
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/store/service/MultiValuedTimestampTest.java5
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/store/service/VersionedTest.java3
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/TableUtilsTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/AbstractCellComparatorTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/AbstractCellFormatterTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/AppIdFormatterTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/ConnectPointFormatterTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/DefaultCellComparatorTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/DefaultCellFormatterTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/HexFormatterTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/HostLocationFormatterTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/TimeFormatterTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/BiLinkMapTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTestBase.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/ButtonIdTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/HighlightsTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/LinkHighlightTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/ModTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/NodeSelectionTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/PropertyPanelTest.java1
-rw-r--r--framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/TopoJsonTest.java1
-rw-r--r--framework/src/onos/core/common/pom.xml2
-rw-r--r--framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/MockCodecContext.java2
-rw-r--r--framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java9
-rw-r--r--framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStoreTest.java33
-rw-r--r--framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleFlowRuleStore.java11
-rw-r--r--framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStore.java17
-rw-r--r--framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStoreTest.java20
-rw-r--r--framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleHostStore.java96
-rw-r--r--framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleLinkStore.java3
-rw-r--r--framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleLinkStoreTest.java33
-rw-r--r--framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleMastershipStore.java8
-rw-r--r--framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimplePacketStore.java8
-rw-r--r--framework/src/onos/core/net/pom.xml2
-rw-r--r--framework/src/onos/core/net/src/main/java/org/onosproject/core/impl/CoreManager.java2
-rw-r--r--framework/src/onos/core/net/src/main/java/org/onosproject/net/edgeservice/impl/package-info.java16
-rw-r--r--framework/src/onos/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java38
-rw-r--r--framework/src/onos/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java48
-rw-r--r--framework/src/onos/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/MplsIntentCompiler.java15
-rw-r--r--framework/src/onos/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalConnectivityIntentCompiler.java48
-rw-r--r--framework/src/onos/core/net/src/main/java/org/onosproject/net/link/impl/BasicLinkOperator.java42
-rw-r--r--framework/src/onos/core/net/src/main/java/org/onosproject/net/link/impl/LinkManager.java81
-rw-r--r--framework/src/onos/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java14
-rw-r--r--framework/src/onos/core/net/src/main/java/org/onosproject/net/proxyarp/impl/ProxyArpManager.java359
-rw-r--r--framework/src/onos/core/net/src/main/java/org/onosproject/net/statistic/impl/StatisticManager.java22
-rw-r--r--framework/src/onos/core/net/src/test/java/org/onosproject/net/device/impl/BasicDeviceOperatorTest.java7
-rw-r--r--framework/src/onos/core/net/src/test/java/org/onosproject/net/device/impl/OpticalPortOperatorTest.java15
-rw-r--r--framework/src/onos/core/net/src/test/java/org/onosproject/net/group/impl/GroupManagerTest.java4
-rw-r--r--framework/src/onos/core/net/src/test/java/org/onosproject/net/host/impl/BasicHostOperatorTest.java7
-rw-r--r--framework/src/onos/core/net/src/test/java/org/onosproject/net/host/impl/HostManagerTest.java294
-rw-r--r--framework/src/onos/core/net/src/test/java/org/onosproject/net/host/impl/HostMonitorTest.java25
-rw-r--r--framework/src/onos/core/net/src/test/java/org/onosproject/net/intent/impl/MockFlowRuleService.java8
-rw-r--r--framework/src/onos/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/MplsIntentCompilerTest.java15
-rw-r--r--framework/src/onos/core/net/src/test/java/org/onosproject/net/link/impl/BasicLinkOperatorTest.java7
-rw-r--r--framework/src/onos/core/pom.xml2
-rw-r--r--framework/src/onos/core/security/pom.xml17
-rw-r--r--framework/src/onos/core/security/src/main/java/org/onosproject/security/impl/DefaultPolicyBuilder.java15
-rw-r--r--framework/src/onos/core/security/src/main/java/org/onosproject/security/impl/SecurityModeManager.java20
-rw-r--r--framework/src/onos/core/security/src/main/java/org/onosproject/security/store/package-info.java20
-rw-r--r--framework/src/onos/core/store/dist/pom.xml2
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/ClusterDefinitionManager.java15
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/IOLoopMessagingManager.java15
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/NettyMessagingManager.java15
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/ConsistentMapBackedJavaMap.java15
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DatabaseManager.java3
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DefaultDatabaseState.java2
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/core/impl/ConsistentApplicationIdStore.java4
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/core/impl/ConsistentIdBlockStore.java15
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/core/impl/LogicalClockManager.java15
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceDescriptions.java10
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceInjectedEvent.java15
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java12
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/PortFragmentId.java2
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/PortInjectedEvent.java15
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/flow/ReplicaInfoEvent.java2
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java6
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/host/impl/ECHostStore.java530
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/impl/LogicalTimestamp.java15
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/link/impl/ECLinkStore.java17
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/link/impl/GossipLinkStore.java3
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/link/impl/LinkInjectedEvent.java15
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/mastership/impl/RoleValue.java6
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/packet/impl/DistributedPacketStore.java14
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/proxyarp/impl/package-info.java20
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentLinkResourceStore.java15
-rw-r--r--framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/statistic/impl/DistributedStatisticStore.java2
-rw-r--r--framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/cluster/messaging/impl/ClusterCommunicationManagerTest.java2
-rw-r--r--framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/MatchTest.java15
-rw-r--r--framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/ResultTest.java15
-rw-r--r--framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/UpdateResultTest.java27
-rw-r--r--framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/device/impl/GossipDeviceStoreTest.java33
-rw-r--r--framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/flow/impl/ReplicaInfoManagerTest.java2
-rw-r--r--framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/impl/TimestampedTest.java2
-rw-r--r--framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/link/impl/GossipLinkStoreTest.java33
-rw-r--r--framework/src/onos/core/store/pom.xml2
-rw-r--r--framework/src/onos/core/store/serializers/pom.xml2
-rw-r--r--framework/src/onos/core/store/serializers/src/main/java/org/onosproject/store/serializers/AnnotationsSerializer.java15
-rw-r--r--framework/src/onos/docs/external.xml4
-rw-r--r--framework/src/onos/docs/internal-apis2
-rw-r--r--framework/src/onos/docs/internal-core31
-rw-r--r--framework/src/onos/docs/internal-incubator4
-rw-r--r--framework/src/onos/docs/internal.xml4
-rw-r--r--framework/src/onos/drivers/pom.xml4
-rw-r--r--framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/CentecV350Pipeline.java15
-rw-r--r--framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/CorsaPipeline.java15
-rw-r--r--framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/CpqdOFDPA1Pipeline.java15
-rw-r--r--framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/SoftRouterPipeline.java15
-rw-r--r--framework/src/onos/features/pom.xml2
-rw-r--r--framework/src/onos/incubator/api/pom.xml2
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/ConfigException.java3
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/ExtraSubjectFactories.java2
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/InterfaceConfig.java2
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/domain/TunnelPrimitive.java2
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/intf/Interface.java2
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/intf/InterfaceService.java2
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/DefaultLabelResource.java15
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResource.java15
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceAdminService.java15
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceDelegate.java15
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceEvent.java15
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceId.java15
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceListener.java15
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourcePool.java15
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceProvider.java15
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceProviderRegistry.java15
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceProviderService.java15
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceRequest.java15
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceService.java15
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceStore.java15
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/DefaultTunnelStatistics.java27
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelEndPointFormatter.java17
-rw-r--r--framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelStatistics.java27
-rw-r--r--framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/config/basics/OpticalPortConfigTest.java15
-rw-r--r--framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/resource/label/DefaultLabelResourceTest.java15
-rw-r--r--framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/resource/label/LabelResourcePoolTest.java15
-rw-r--r--framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/resource/label/LabelResourceRequestTest.java15
-rw-r--r--framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/DefaultTunnelTest.java15
-rw-r--r--framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelEventTest.java15
-rw-r--r--framework/src/onos/incubator/net/pom.xml2
-rw-r--r--framework/src/onos/incubator/net/src/main/java/org/onosproject/incubator/net/intf/impl/package-info.java20
-rw-r--r--framework/src/onos/incubator/net/src/main/java/org/onosproject/incubator/net/intf/package-info.java20
-rw-r--r--framework/src/onos/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/package-info.java20
-rw-r--r--framework/src/onos/incubator/net/src/main/java/org/onosproject/incubator/net/resource/label/impl/LabelResourceManager.java15
-rw-r--r--framework/src/onos/incubator/net/src/test/java/org/onosproject/incubator/net/intf/impl/InterfaceManagerTest.java287
-rw-r--r--framework/src/onos/incubator/pom.xml2
-rw-r--r--framework/src/onos/incubator/store/pom.xml2
-rw-r--r--framework/src/onos/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/package-info.java21
-rw-r--r--framework/src/onos/incubator/store/src/main/java/org/onosproject/incubator/store/resource/impl/DistributedLabelResourceStore.java15
-rw-r--r--framework/src/onos/incubator/store/src/main/java/org/onosproject/incubator/store/resource/impl/LabelResourceMessageSubjects.java15
-rw-r--r--framework/src/onos/openflow/api/pom.xml2
-rw-r--r--framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/OpenFlowOpticalSwitch.java15
-rw-r--r--framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/PortDescPropertyType.java15
-rw-r--r--framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/ThirdPartyMessage.java15
-rw-r--r--framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/WithTypedPorts.java15
-rw-r--r--framework/src/onos/openflow/ctl/pom.xml2
-rw-r--r--framework/src/onos/openflow/pom.xml2
-rw-r--r--framework/src/onos/ovsdb/api/pom.xml2
-rw-r--r--framework/src/onos/ovsdb/ctl/pom.xml2
-rw-r--r--framework/src/onos/ovsdb/pom.xml2
-rw-r--r--framework/src/onos/ovsdb/rfc/pom.xml25
-rw-r--r--framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/exception/package-info.java20
-rw-r--r--framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/package-info.java20
-rw-r--r--framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/message/package-info.java20
-rw-r--r--framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/json/package-info.java20
-rw-r--r--framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/package-info.java20
-rw-r--r--framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/operations/package-info.java20
-rw-r--r--framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/schema/package-info.java20
-rw-r--r--framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/schema/type/package-info.java20
-rw-r--r--framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/OpenVSwitch.java15
-rw-r--r--framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Port.java15
-rw-r--r--framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/package-info.java20
-rw-r--r--framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/package-info.java20
-rw-r--r--framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/MutationUtil.java15
-rw-r--r--framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/package-info.java20
-rw-r--r--framework/src/onos/pcep/api/pom.xml2
-rw-r--r--framework/src/onos/pcep/ctl/pom.xml2
-rwxr-xr-xframework/src/onos/pcep/pcepio/pom.xml2
-rw-r--r--framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorMsgVer1.java15
-rw-r--r--framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorObjectVer1.java15
-rw-r--r--framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepMsgPathVer1.java15
-rw-r--r--framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/ErrorObjListWithOpen.java15
-rw-r--r--framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PathSetupTypeTlv.java15
-rw-r--r--framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PceccCapabilityTlv.java15
-rw-r--r--framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelDbVerTlv.java15
-rw-r--r--framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelDownload.java15
-rw-r--r--framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiUnnumberedAdjacencyIpv4.java15
-rw-r--r--framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv6ErrorSpec.java15
-rw-r--r--framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/util/HexDump.java15
-rwxr-xr-xframework/src/onos/pcep/pom.xml2
-rw-r--r--framework/src/onos/pom.xml2
-rw-r--r--framework/src/onos/providers/host/pom.xml2
-rw-r--r--framework/src/onos/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java2
-rw-r--r--framework/src/onos/providers/lldp/pom.xml2
-rw-r--r--framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/DiscoveryContext.java69
-rw-r--r--framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java357
-rw-r--r--framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java228
-rw-r--r--framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LLDPLinkProviderTest.java10
-rw-r--r--framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/SuppressionRulesTest.java15
-rw-r--r--framework/src/onos/providers/netconf/app/features.xml24
-rw-r--r--framework/src/onos/providers/netconf/app/pom.xml2
-rw-r--r--framework/src/onos/providers/netconf/device/pom.xml2
-rw-r--r--framework/src/onos/providers/netconf/flow/pom.xml2
-rw-r--r--framework/src/onos/providers/netconf/pom.xml2
-rw-r--r--framework/src/onos/providers/null/pom.xml2
-rw-r--r--framework/src/onos/providers/openflow/app/features.xml24
-rw-r--r--framework/src/onos/providers/openflow/app/pom.xml2
-rw-r--r--framework/src/onos/providers/openflow/device/pom.xml2
-rw-r--r--framework/src/onos/providers/openflow/flow/pom.xml2
-rw-r--r--framework/src/onos/providers/openflow/group/pom.xml2
-rw-r--r--framework/src/onos/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java15
-rw-r--r--framework/src/onos/providers/openflow/meter/pom.xml2
-rw-r--r--framework/src/onos/providers/openflow/packet/pom.xml2
-rw-r--r--framework/src/onos/providers/openflow/pom.xml2
-rw-r--r--framework/src/onos/providers/ovsdb/app/pom.xml2
-rw-r--r--framework/src/onos/providers/ovsdb/device/pom.xml2
-rw-r--r--framework/src/onos/providers/ovsdb/host/pom.xml2
-rw-r--r--framework/src/onos/providers/ovsdb/host/src/main/java/org/onosproject/ovsdb/provider/host/OvsdbHostProvider.java296
-rw-r--r--framework/src/onos/providers/ovsdb/host/src/test/java/org/onosproject/ovsdb/provider/host/OvsdbHostProviderTest.java2
-rw-r--r--framework/src/onos/providers/ovsdb/pom.xml17
-rw-r--r--framework/src/onos/providers/ovsdb/tunnel/pom.xml2
-rw-r--r--framework/src/onos/providers/pcep/app/features.xml24
-rw-r--r--framework/src/onos/providers/pcep/app/pom.xml17
-rw-r--r--framework/src/onos/providers/pcep/pom.xml17
-rw-r--r--framework/src/onos/providers/pcep/topology/pom.xml17
-rw-r--r--framework/src/onos/providers/pcep/tunnel/pom.xml17
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/TunnelStatsCollector.java24
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientAdapter.java15
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientControllerAdapter.java15
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelProviderRegistryAdapter.java15
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelServiceAdapter.java15
-rw-r--r--framework/src/onos/providers/pom.xml2
-rw-r--r--framework/src/onos/tools/build/envDefaults4
-rwxr-xr-xframework/src/onos/tools/build/onos-package102
-rwxr-xr-xframework/src/onos/tools/build/onosUploadBits.py2
-rw-r--r--framework/src/onos/tools/package/archetypes/api/pom.xml2
-rw-r--r--framework/src/onos/tools/package/archetypes/api/src/main/resources/archetype-resources/pom.xml2
-rw-r--r--framework/src/onos/tools/package/archetypes/bundle/pom.xml2
-rw-r--r--framework/src/onos/tools/package/archetypes/bundle/src/main/resources/archetype-resources/pom.xml2
-rw-r--r--framework/src/onos/tools/package/archetypes/cli/pom.xml2
-rw-r--r--framework/src/onos/tools/package/archetypes/cli/src/main/resources/archetype-resources/pom.xml2
-rw-r--r--framework/src/onos/tools/package/archetypes/pom.xml2
-rw-r--r--framework/src/onos/tools/package/archetypes/ui/pom.xml2
-rw-r--r--framework/src/onos/tools/package/archetypes/ui/src/main/resources/archetype-resources/pom.xml2
-rw-r--r--framework/src/onos/tools/package/branding/pom.xml2
-rw-r--r--framework/src/onos/tools/package/deb/control8
-rw-r--r--framework/src/onos/tools/package/deb/copyright20
-rwxr-xr-xframework/src/onos/tools/package/deb/postinst16
-rwxr-xr-xframework/src/onos/tools/package/deb/postrm5
-rwxr-xr-xframework/src/onos/tools/package/deb/prerm23
-rw-r--r--framework/src/onos/tools/package/init/onos.conf37
-rw-r--r--framework/src/onos/tools/package/rpm/onos.spec71
-rwxr-xr-xframework/src/onos/tools/test/bin/onos-archetypes-test2
-rwxr-xr-xframework/src/onos/tools/test/bin/onos-check-intent2
-rwxr-xr-xframework/src/onos/tools/test/bin/onos-check-logs20
-rwxr-xr-xframework/src/onos/tools/test/bin/onos-install2
-rwxr-xr-xframework/src/onos/tools/test/bin/onos-start-network26
-rwxr-xr-xframework/src/onos/tools/test/bin/onos-topo-cfg3
-rwxr-xr-xframework/src/onos/tools/test/bin/onos-uninstall10
-rwxr-xr-xframework/src/onos/tools/test/bin/stc16
-rw-r--r--framework/src/onos/tools/test/cells/office3
-rw-r--r--framework/src/onos/tools/test/configs/office-dhcp.json22
-rwxr-xr-xframework/src/onos/tools/test/scenarios/bin/curl-with-retry23
-rwxr-xr-xframework/src/onos/tools/test/scenarios/bin/find-link-in-cluster.py54
-rwxr-xr-xframework/src/onos/tools/test/scenarios/bin/find-topo-infrastructure.py34
-rwxr-xr-xframework/src/onos/tools/test/scenarios/bin/query-cluster.py37
-rwxr-xr-xframework/src/onos/tools/test/scenarios/bin/query-topo.py35
-rwxr-xr-xframework/src/onos/tools/test/scenarios/bin/verify-topo-devices.py51
-rw-r--r--framework/src/onos/tools/test/scenarios/net-link-down-up.xml14
-rw-r--r--framework/src/onos/tools/test/scenarios/net-pingall.xml4
-rw-r--r--framework/src/onos/tools/test/scenarios/net-rest.xml19
-rw-r--r--framework/src/onos/tools/test/scenarios/net-setup.xml6
-rw-r--r--framework/src/onos/tools/test/scenarios/net-smoke.xml6
-rw-r--r--framework/src/onos/tools/test/scenarios/net-topo.xml76
-rw-r--r--framework/src/onos/tools/test/scenarios/prerequisites.xml2
-rwxr-xr-xframework/src/onos/tools/test/topos/onos.py2
-rw-r--r--framework/src/onos/tools/test/topos/opticalUtils.py74
-rwxr-xr-xframework/src/onos/utils/jdvue/bin/jdvue2
-rw-r--r--framework/src/onos/utils/jdvue/pom.xml26
-rw-r--r--framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/Catalog.java15
-rw-r--r--framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/Dependency.java15
-rw-r--r--framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyCycle.java15
-rw-r--r--framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyViewer.java15
-rw-r--r--framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/JavaEntity.java15
-rw-r--r--framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/JavaPackage.java15
-rw-r--r--framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/JavaSource.java15
-rw-r--r--framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/CatalogTest.java15
-rw-r--r--framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyCycleTest.java15
-rw-r--r--framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyTest.java15
-rw-r--r--framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyViewerTest.java15
-rw-r--r--framework/src/onos/utils/jnc/pom.xml2
-rw-r--r--framework/src/onos/utils/junit/pom.xml2
-rw-r--r--framework/src/onos/utils/misc/pom.xml2
-rw-r--r--framework/src/onos/utils/misc/src/main/java/org/onlab/graph/GAOrganism.java15
-rw-r--r--framework/src/onos/utils/misc/src/main/java/org/onlab/graph/GAPopulation.java15
-rw-r--r--framework/src/onos/utils/misc/src/main/java/org/onlab/packet/IPv4.java2
-rw-r--r--framework/src/onos/utils/misc/src/main/java/org/onlab/packet/MPLS.java15
-rwxr-xr-xframework/src/onos/utils/misc/src/main/java/org/onlab/packet/PIM.java296
-rw-r--r--framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrGroup.java257
-rw-r--r--framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrSource.java281
-rw-r--r--framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrUnicast.java182
-rw-r--r--framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMHello.java118
-rw-r--r--framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMHelloOption.java147
-rw-r--r--framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMJoinPrune.java271
-rwxr-xr-xframework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/package-info.java21
-rw-r--r--framework/src/onos/utils/misc/src/test/java/org/onlab/packet/PIMTest.java132
-rw-r--r--framework/src/onos/utils/misc/src/test/java/org/onlab/util/HexStringTest.java4
-rw-r--r--framework/src/onos/utils/netty/pom.xml2
-rw-r--r--framework/src/onos/utils/nio/pom.xml2
-rw-r--r--framework/src/onos/utils/osgi/pom.xml2
-rw-r--r--framework/src/onos/utils/pom.xml2
-rw-r--r--framework/src/onos/utils/rest/pom.xml2
-rwxr-xr-xframework/src/onos/utils/stc/bin/stc2
-rw-r--r--framework/src/onos/utils/stc/pom.xml2
-rw-r--r--framework/src/onos/utils/stc/src/main/java/org/onlab/stc/Coordinator.java9
-rw-r--r--framework/src/onos/utils/stc/src/main/java/org/onlab/stc/Main.java24
-rw-r--r--framework/src/onos/utils/stc/src/main/java/org/onlab/stc/ScenarioStore.java25
-rw-r--r--framework/src/onos/utils/thirdparty/pom.xml2
-rw-r--r--framework/src/onos/web/api/pom.xml2
-rw-r--r--framework/src/onos/web/gui/pom.xml2
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TunnelViewMessageHandler.java15
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/package-info.java20
-rw-r--r--framework/src/onos/web/pom.xml2
559 files changed, 13083 insertions, 7115 deletions
diff --git a/framework/src/onos/apps/aaa/pom.xml b/framework/src/onos/apps/aaa/pom.xml
index 6f850750..78fd4a62 100644
--- a/framework/src/onos/apps/aaa/pom.xml
+++ b/framework/src/onos/apps/aaa/pom.xml
@@ -23,7 +23,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/acl/pom.xml b/framework/src/onos/apps/acl/pom.xml
index 20f784fc..54dee432 100644
--- a/framework/src/onos/apps/acl/pom.xml
+++ b/framework/src/onos/apps/acl/pom.xml
@@ -24,19 +24,19 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>onos-app-acl</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<packaging>bundle</packaging>
<description>ONOS ACL application</description>
<url>http://onosproject.org</url>
<properties>
- <onos.version>1.3.0-SNAPSHOT</onos.version>
+ <onos.version>1.4.0-SNAPSHOT</onos.version>
<onos.app.name>org.onosproject.acl</onos.app.name>
<onos.app.origin>DLUT</onos.app.origin>
<web.context>/onos/acl</web.context>
diff --git a/framework/src/onos/apps/acl/src/main/java/org/onos/acl/impl/DistributedAclStore.java b/framework/src/onos/apps/acl/src/main/java/org/onos/acl/impl/DistributedAclStore.java
index 6d909a97..5c8a93cb 100644
--- a/framework/src/onos/apps/acl/src/main/java/org/onos/acl/impl/DistributedAclStore.java
+++ b/framework/src/onos/apps/acl/src/main/java/org/onos/acl/impl/DistributedAclStore.java
@@ -234,7 +234,7 @@ public class DistributedAclStore extends AbstractStore implements AclStore {
ruleToDevice.computeIf(ruleId,
deviceIdSet -> (deviceIdSet == null || !deviceIdSet.contains(deviceId)),
(id, deviceIdSet) -> {
- Set<DeviceId> newSet = new HashSet<DeviceId>();
+ Set<DeviceId> newSet = new HashSet<>();
if (deviceIdSet != null) {
newSet.addAll(deviceIdSet);
}
@@ -248,4 +248,4 @@ public class DistributedAclStore extends AbstractStore implements AclStore {
ruleToDevice.remove(ruleId);
}
-} \ No newline at end of file
+}
diff --git a/framework/src/onos/apps/acl/src/main/java/org/onos/acl/impl/package-info.java b/framework/src/onos/apps/acl/src/main/java/org/onos/acl/impl/package-info.java
new file mode 100644
index 00000000..e9aa1448
--- /dev/null
+++ b/framework/src/onos/apps/acl/src/main/java/org/onos/acl/impl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * ACL application implementation.
+ */
+package org.onos.acl.impl;
diff --git a/framework/src/onos/apps/acl/src/main/java/org/onos/acl/package-info.java b/framework/src/onos/apps/acl/src/main/java/org/onos/acl/package-info.java
new file mode 100644
index 00000000..fa4131ee
--- /dev/null
+++ b/framework/src/onos/apps/acl/src/main/java/org/onos/acl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * ACL application.
+ */
+package org.onos.acl;
diff --git a/framework/src/onos/apps/bgprouter/app.xml b/framework/src/onos/apps/bgprouter/app.xml
index c85e469a..2fc47be9 100644
--- a/framework/src/onos/apps/bgprouter/app.xml
+++ b/framework/src/onos/apps/bgprouter/app.xml
@@ -22,5 +22,4 @@
<artifact>mvn:${project.groupId}/onos-app-routing-api/${project.version}</artifact>
<artifact>mvn:${project.groupId}/onos-app-routing/${project.version}</artifact>
<artifact>mvn:${project.groupId}/onos-app-proxyarp/${project.version}</artifact>
- <artifact>mvn:${project.groupId}/onos-app-config/${project.version}</artifact>
</app>
diff --git a/framework/src/onos/apps/bgprouter/features.xml b/framework/src/onos/apps/bgprouter/features.xml
index 3457321c..c91a7f10 100644
--- a/framework/src/onos/apps/bgprouter/features.xml
+++ b/framework/src/onos/apps/bgprouter/features.xml
@@ -20,7 +20,6 @@
description="${project.description}">
<feature>onos-api</feature>
<bundle>mvn:${project.groupId}/onos-app-routing-api/${project.version}</bundle>
- <bundle>mvn:${project.groupId}/onos-app-config/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-app-proxyarp/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-app-bgprouter/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-app-routing/${project.version}</bundle>
diff --git a/framework/src/onos/apps/bgprouter/pom.xml b/framework/src/onos/apps/bgprouter/pom.xml
index d3f6f522..decdf5c2 100644
--- a/framework/src/onos/apps/bgprouter/pom.xml
+++ b/framework/src/onos/apps/bgprouter/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>onos-apps</artifactId>
<groupId>org.onosproject</groupId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -60,12 +60,6 @@
<dependency>
<groupId>org.onosproject</groupId>
- <artifactId>onos-app-config</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.onosproject</groupId>
<artifactId>onos-app-proxyarp</artifactId>
<version>${project.version}</version>
</dependency>
diff --git a/framework/src/onos/apps/cip/pom.xml b/framework/src/onos/apps/cip/pom.xml
index a3645931..77cfe150 100644
--- a/framework/src/onos/apps/cip/pom.xml
+++ b/framework/src/onos/apps/cip/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/cip/src/main/java/org/onosproject/cip/package-info.java b/framework/src/onos/apps/cip/src/main/java/org/onosproject/cip/package-info.java
new file mode 100644
index 00000000..1d358eb0
--- /dev/null
+++ b/framework/src/onos/apps/cip/src/main/java/org/onosproject/cip/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Cluster IP Manager, which is responsible for managing the cluster IP
+ * address alias.
+ */
+package org.onosproject.cip;
diff --git a/framework/src/onos/apps/cordfabric/pom.xml b/framework/src/onos/apps/cordfabric/pom.xml
index f5388553..a10db440 100644
--- a/framework/src/onos/apps/cordfabric/pom.xml
+++ b/framework/src/onos/apps/cordfabric/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>onos-apps</artifactId>
<groupId>org.onosproject</groupId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/framework/src/onos/apps/cordvtn/pom.xml b/framework/src/onos/apps/cordvtn/pom.xml
new file mode 100644
index 00000000..a019bec2
--- /dev/null
+++ b/framework/src/onos/apps/cordvtn/pom.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright 2014 Open Networking Laboratory
+ ~
+ ~ 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.
+ -->
+<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>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-apps</artifactId>
+ <version>1.4.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>onos-app-cordvtn</artifactId>
+ <packaging>bundle</packaging>
+
+ <description>Virtual tenant network service for CORD</description>
+
+ <properties>
+ <onos.app.name>org.onosproject.cordvtn</onos.app.name>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-core-serializers</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/ConnectionHandler.java b/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/ConnectionHandler.java
new file mode 100644
index 00000000..af738230
--- /dev/null
+++ b/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/ConnectionHandler.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2014-2015 Open Networking Laboratory
+ *
+ * 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.onosproject.cordvtn;
+
+/**
+ * Entity capable of handling a subject connected and disconnected situation.
+ */
+public interface ConnectionHandler<T> {
+
+ /**
+ * Processes the connected subject.
+ *
+ * @param subject subject
+ */
+ void connected(T subject);
+
+ /**
+ * Processes the disconnected subject.
+ *
+ * @param subject subject.
+ */
+ void disconnected(T subject);
+}
diff --git a/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtn.java b/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtn.java
new file mode 100644
index 00000000..072254de
--- /dev/null
+++ b/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtn.java
@@ -0,0 +1,311 @@
+/*
+ * Copyright 2014-2015 Open Networking Laboratory
+ *
+ * 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.onosproject.cordvtn;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.Service;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.TpPort;
+import org.onlab.util.KryoNamespace;
+import org.onosproject.cluster.ClusterService;
+import org.onosproject.cluster.LeadershipEvent;
+import org.onosproject.cluster.LeadershipEventListener;
+import org.onosproject.cluster.LeadershipService;
+import org.onosproject.cluster.NodeId;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.core.CoreService;
+import org.onosproject.mastership.MastershipService;
+import org.onosproject.net.Device;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.Host;
+import org.onosproject.net.config.ConfigFactory;
+import org.onosproject.net.config.NetworkConfigRegistry;
+import org.onosproject.net.config.NetworkConfigService;
+import org.onosproject.net.config.basics.SubjectFactories;
+import org.onosproject.net.device.DeviceEvent;
+import org.onosproject.net.device.DeviceListener;
+import org.onosproject.net.device.DeviceService;
+import org.onosproject.net.host.HostEvent;
+import org.onosproject.net.host.HostListener;
+import org.onosproject.net.host.HostService;
+import org.onosproject.store.serializers.KryoNamespaces;
+import org.onosproject.store.service.EventuallyConsistentMap;
+import org.onosproject.store.service.LogicalClockService;
+import org.onosproject.store.service.StorageService;
+import org.slf4j.Logger;
+
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.stream.Collectors;
+
+import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.cordvtn.OvsdbNode.State.INIT;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * CORD VTN Application that provisions overlay virtual tenant networks.
+ */
+@Component(immediate = true)
+@Service
+public class CordVtn implements CordVtnService {
+
+ protected final Logger log = getLogger(getClass());
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected CoreService coreService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected StorageService storageService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected LogicalClockService clockService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected ClusterService clusterService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected LeadershipService leadershipService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected NetworkConfigService configService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected NetworkConfigRegistry configRegistry;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected DeviceService deviceService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected HostService hostService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected MastershipService mastershipService;
+
+ private static final int DEFAULT_NUM_THREADS = 1;
+ private static final KryoNamespace.Builder NODE_SERIALIZER = KryoNamespace.newBuilder()
+ .register(KryoNamespaces.API)
+ .register(OvsdbNode.class);
+
+ private final ExecutorService eventExecutor = Executors.newFixedThreadPool(
+ DEFAULT_NUM_THREADS, groupedThreads("onos/cordvtn", "event-handler"));
+
+ private final LeadershipEventListener leadershipListener = new InternalLeadershipListener();
+ private final DeviceListener deviceListener = new InternalDeviceListener();
+ private final HostListener hostListener = new InternalHostListener();
+ private final NodeHandler nodeHandler = new NodeHandler();
+ private final BridgeHandler bridgeHandler = new BridgeHandler();
+ private final VirtualMachineHandler vmHandler = new VirtualMachineHandler();
+
+ private final ConfigFactory configFactory =
+ new ConfigFactory(SubjectFactories.APP_SUBJECT_FACTORY, CordVtnConfig.class, "cordvtn") {
+ @Override
+ public CordVtnConfig createConfig() {
+ return new CordVtnConfig();
+ }
+ };
+
+ private ApplicationId appId;
+ private NodeId local;
+ private EventuallyConsistentMap<DeviceId, OvsdbNode> nodeStore;
+ private NodeConnectionManager nodeConnectionManager;
+
+ @Activate
+ protected void activate() {
+ appId = coreService.registerApplication("org.onosproject.cordvtn");
+
+ local = clusterService.getLocalNode().id();
+ nodeStore = storageService.<DeviceId, OvsdbNode>eventuallyConsistentMapBuilder()
+ .withName("cordvtn-nodestore")
+ .withSerializer(NODE_SERIALIZER)
+ .withTimestampProvider((k, v) -> clockService.getTimestamp())
+ .build();
+ configRegistry.registerConfigFactory(configFactory);
+
+ deviceService.addListener(deviceListener);
+ hostService.addListener(hostListener);
+ leadershipService.addListener(leadershipListener);
+ leadershipService.runForLeadership(appId.name());
+ nodeConnectionManager = new NodeConnectionManager(appId, local, nodeStore,
+ mastershipService, leadershipService);
+ nodeConnectionManager.start();
+ log.info("Started");
+ }
+
+ @Deactivate
+ protected void deactivate() {
+ nodeConnectionManager.stop();
+ leadershipService.removeListener(leadershipListener);
+ leadershipService.withdraw(appId.name());
+ deviceService.removeListener(deviceListener);
+ hostService.removeListener(hostListener);
+ eventExecutor.shutdown();
+ nodeStore.destroy();
+ configRegistry.unregisterConfigFactory(configFactory);
+ log.info("Stopped");
+ }
+
+ @Override
+ public void addNode(String hostname, IpAddress ip, TpPort port) {
+ DefaultOvsdbNode node = new DefaultOvsdbNode(hostname, ip, port, DeviceId.NONE, INIT);
+
+ if (nodeStore.containsKey(node.deviceId())) {
+ log.warn("Node {} with ovsdb-server {}:{} already exists", hostname, ip, port);
+ return;
+ }
+ nodeStore.put(node.deviceId(), node);
+ log.info("New node {} with ovsdb-server {}:{} has been added", hostname, ip, port);
+ }
+
+ @Override
+ public void deleteNode(IpAddress ip, TpPort port) {
+ DeviceId deviceId = DeviceId.deviceId("ovsdb:" + ip + ":" + port);
+ OvsdbNode node = nodeStore.get(deviceId);
+
+ if (node == null) {
+ log.warn("Node with ovsdb-server on {}:{} does not exist", ip, port);
+ return;
+ }
+ nodeConnectionManager.disconnectNode(node);
+ nodeStore.remove(node.deviceId());
+ }
+
+ @Override
+ public int getNodeCount() {
+ return nodeStore.size();
+ }
+
+ @Override
+ public List<OvsdbNode> getNodes() {
+ return nodeStore.values()
+ .stream()
+ .collect(Collectors.toList());
+ }
+
+ private void initialSetup() {
+ // Read ovsdb nodes from network config
+ CordVtnConfig config = configService.getConfig(appId, CordVtnConfig.class);
+ if (config == null) {
+ log.warn("No configuration found");
+ return;
+ }
+ config.ovsdbNodes().forEach(
+ node -> addNode(node.hostname(), node.ip(), node.port()));
+ }
+
+ private synchronized void processLeadershipChange(NodeId leader) {
+ // Only the leader performs the initial setup
+ if (leader == null || !leader.equals(local)) {
+ return;
+ }
+ initialSetup();
+ }
+
+ private class InternalLeadershipListener implements LeadershipEventListener {
+
+ @Override
+ public void event(LeadershipEvent event) {
+ if (event.subject().topic().equals(appId.name())) {
+ processLeadershipChange(event.subject().leader());
+ }
+ }
+ }
+
+ private class InternalDeviceListener implements DeviceListener {
+
+ @Override
+ public void event(DeviceEvent event) {
+ Device device = event.subject();
+ ConnectionHandler handler =
+ (device.type() == Device.Type.CONTROLLER ? nodeHandler : bridgeHandler);
+
+ switch (event.type()) {
+ case DEVICE_ADDED:
+ eventExecutor.submit(() -> handler.connected(device));
+ break;
+ case DEVICE_AVAILABILITY_CHANGED:
+ eventExecutor.submit(() -> handler.disconnected(device));
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ private class InternalHostListener implements HostListener {
+
+ @Override
+ public void event(HostEvent event) {
+ Host vm = event.subject();
+
+ switch (event.type()) {
+ case HOST_ADDED:
+ eventExecutor.submit(() -> vmHandler.connected(vm));
+ break;
+ case HOST_REMOVED:
+ eventExecutor.submit(() -> vmHandler.disconnected(vm));
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ private class NodeHandler implements ConnectionHandler<Device> {
+
+ @Override
+ public void connected(Device device) {
+ // create bridge and set bridgeId
+ // set node state connected
+ }
+
+ @Override
+ public void disconnected(Device device) {
+ // set node state disconnected if the node exists
+ // which means that the node is not deleted explicitly
+ }
+ }
+
+ private class BridgeHandler implements ConnectionHandler<Device> {
+
+ @Override
+ public void connected(Device device) {
+ // create vxlan port
+ }
+
+ @Override
+ public void disconnected(Device device) {
+
+ }
+ }
+
+ private class VirtualMachineHandler implements ConnectionHandler<Host> {
+
+ @Override
+ public void connected(Host host) {
+ // install flow rules for this vm
+ }
+
+ @Override
+ public void disconnected(Host host) {
+ // uninstall flow rules associated with this vm
+ }
+ }
+}
diff --git a/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnConfig.java b/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnConfig.java
new file mode 100644
index 00000000..c2c37aba
--- /dev/null
+++ b/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnConfig.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2014-2015 Open Networking Laboratory
+ *
+ * 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.onosproject.cordvtn;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.google.common.collect.Sets;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.TpPort;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.net.config.Config;
+
+import java.util.Set;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Configuration object for CORD VTN service.
+ */
+public class CordVtnConfig extends Config<ApplicationId> {
+
+ public static final String OVSDB_NODES = "ovsdbNodes";
+ public static final String HOSTNAME = "hostname";
+ public static final String IP = "ip";
+ public static final String PORT = "port";
+
+ /**
+ * Returns the set of ovsdb nodes read from network config.
+ *
+ * @return set of OvsdbNodeConfig or null
+ */
+ public Set<OvsdbNodeConfig> ovsdbNodes() {
+ Set<OvsdbNodeConfig> ovsdbNodes = Sets.newHashSet();
+
+ JsonNode nodes = object.get(OVSDB_NODES);
+ if (nodes == null) {
+ return null;
+ }
+ nodes.forEach(jsonNode -> ovsdbNodes.add(new OvsdbNodeConfig(
+ jsonNode.path(HOSTNAME).asText(),
+ IpAddress.valueOf(jsonNode.path(IP).asText()),
+ TpPort.tpPort(jsonNode.path(PORT).asInt()))));
+
+ return ovsdbNodes;
+ }
+
+ /**
+ * Configuration for an OVSDB node.
+ */
+ public static class OvsdbNodeConfig {
+
+ private final String hostname;
+ private final IpAddress ip;
+ private final TpPort port;
+
+ public OvsdbNodeConfig(String hostname, IpAddress ip, TpPort port) {
+ this.hostname = checkNotNull(hostname);
+ this.ip = checkNotNull(ip);
+ this.port = checkNotNull(port);
+ }
+
+ /**
+ * Returns hostname of the node.
+ *
+ * @return hostname
+ */
+ public String hostname() {
+ return this.hostname;
+ }
+
+ /**
+ * Returns ip address to access ovsdb-server of the node.
+ *
+ * @return ip address
+ */
+ public IpAddress ip() {
+ return this.ip;
+ }
+
+ /**
+ * Returns port number to access ovsdb-server of the node.
+ *
+ * @return port number
+ */
+ public TpPort port() {
+ return this.port;
+ }
+ }
+}
diff --git a/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnService.java b/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnService.java
new file mode 100644
index 00000000..d26a10aa
--- /dev/null
+++ b/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnService.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2014-2015 Open Networking Laboratory
+ *
+ * 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.onosproject.cordvtn;
+
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.TpPort;
+
+import java.util.List;
+
+/**
+ * Service for provisioning overlay virtual networks on compute nodes.
+ */
+public interface CordVtnService {
+ /**
+ * Adds a new node to the service.
+ *
+ * @param hostname hostname of the node
+ * @param ip ip address to access the ovsdb server running on the node
+ * @param port port number to access the ovsdb server running on the node
+ */
+ void addNode(String hostname, IpAddress ip, TpPort port);
+
+ /**
+ * Deletes the node from the service.
+ *
+ * @param ip ip address to access the ovsdb server running on the node
+ * @param port port number to access the ovsdb server running on the node
+ */
+ void deleteNode(IpAddress ip, TpPort port);
+
+ /**
+ * Returns the number of the nodes known to the service.
+ *
+ * @return number of nodes
+ */
+ int getNodeCount();
+
+ /**
+ * Returns all nodes known to the service.
+ *
+ * @return list of nodes
+ */
+ List<OvsdbNode> getNodes();
+}
diff --git a/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/DefaultOvsdbNode.java b/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/DefaultOvsdbNode.java
new file mode 100644
index 00000000..b8cdbe94
--- /dev/null
+++ b/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/DefaultOvsdbNode.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2014-2015 Open Networking Laboratory
+ *
+ * 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.onosproject.cordvtn;
+
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.TpPort;
+import org.onosproject.net.DeviceId;
+
+import java.util.Objects;
+
+/**
+ * OvsdbNode implementation.
+ */
+public class DefaultOvsdbNode implements OvsdbNode {
+
+ private final String hostname;
+ private final IpAddress ip;
+ private final TpPort port;
+ private final DeviceId deviceId;
+ private final DeviceId bridgeId;
+ private final State state;
+
+ public DefaultOvsdbNode(String hostname, IpAddress ip, TpPort port,
+ DeviceId bridgeId, State state) {
+ this.hostname = hostname;
+ this.ip = ip;
+ this.port = port;
+ this.deviceId = DeviceId.deviceId(
+ "ovsdb:" + ip.toString() + ":" + port.toString());
+ this.bridgeId = bridgeId;
+ this.state = state;
+ }
+
+ @Override
+ public IpAddress ip() {
+ return this.ip;
+ }
+
+ @Override
+ public TpPort port() {
+ return this.port;
+ }
+
+ @Override
+ public String hostname() {
+ return this.hostname;
+ }
+
+ @Override
+ public State state() {
+ return this.state;
+ }
+
+ @Override
+ public DeviceId deviceId() {
+ return this.deviceId;
+ }
+
+ @Override
+ public DeviceId bridgeId() {
+ return this.bridgeId;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+
+ if (o instanceof DefaultOvsdbNode) {
+ DefaultOvsdbNode that = (DefaultOvsdbNode) o;
+ // We compare the ip and port only.
+ if (this.ip.equals(that.ip) && this.port.equals(that.port)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(ip, port);
+ }
+}
diff --git a/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/NodeConnectionManager.java b/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/NodeConnectionManager.java
new file mode 100644
index 00000000..0b7029ef
--- /dev/null
+++ b/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/NodeConnectionManager.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2014-2015 Open Networking Laboratory
+ *
+ * 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.onosproject.cordvtn;
+
+import org.onosproject.cluster.LeadershipService;
+import org.onosproject.cluster.NodeId;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.mastership.MastershipService;
+import org.onosproject.net.DeviceId;
+import org.onosproject.store.service.EventuallyConsistentMap;
+import org.slf4j.Logger;
+
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import static org.onlab.util.Tools.groupedThreads;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Node connection manager.
+ */
+public class NodeConnectionManager {
+ protected final Logger log = getLogger(getClass());
+
+ private final ApplicationId appId;
+ private final NodeId localId;
+ private final EventuallyConsistentMap<DeviceId, OvsdbNode> nodeStore;
+ private final MastershipService mastershipService;
+ private final LeadershipService leadershipService;
+
+ private static final int DELAY_SEC = 5;
+ private ScheduledExecutorService connectionExecutor;
+
+ /**
+ * Creates a new NodeConnectionManager.
+ *
+ * @param localId local id
+ * @param nodeStore node store
+ * @param mastershipService mastership service
+ */
+ public NodeConnectionManager(ApplicationId appId, NodeId localId,
+ EventuallyConsistentMap<DeviceId, OvsdbNode> nodeStore,
+ MastershipService mastershipService,
+ LeadershipService leadershipService) {
+ this.appId = appId;
+ this.localId = localId;
+ this.nodeStore = nodeStore;
+ this.mastershipService = mastershipService;
+ this.leadershipService = leadershipService;
+ }
+
+ /**
+ * Starts the node connection manager.
+ */
+ public void start() {
+ connectionExecutor = Executors.newSingleThreadScheduledExecutor(
+ groupedThreads("onos/cordvtn", "connection-executor"));
+ connectionExecutor.scheduleWithFixedDelay(() -> nodeStore.values()
+ .stream()
+ .filter(node -> localId.equals(getMaster(node)))
+ .forEach(node -> connectNode(node)), 0, DELAY_SEC, TimeUnit.SECONDS);
+ }
+
+ /**
+ * Stops the node connection manager.
+ */
+ public void stop() {
+ connectionExecutor.shutdown();
+ }
+
+ /**
+ * Adds a new node to the system.
+ *
+ * @param ovsdbNode ovsdb node
+ */
+ public void connectNode(OvsdbNode ovsdbNode) {
+ switch (ovsdbNode.state()) {
+ case INIT:
+ case DISCONNECTED:
+ // TODO: set the node to passive mode
+ case READY:
+ // TODO: initiate connection
+ break;
+ case CONNECTED:
+ break;
+ default:
+ }
+ }
+
+ /**
+ * Deletes the ovsdb node.
+ *
+ * @param ovsdbNode ovsdb node
+ */
+ public void disconnectNode(OvsdbNode ovsdbNode) {
+ switch (ovsdbNode.state()) {
+ case CONNECTED:
+ // TODO: disconnect
+ break;
+ case INIT:
+ case READY:
+ case DISCONNECTED:
+ break;
+ default:
+ }
+ }
+
+ private NodeId getMaster(OvsdbNode ovsdbNode) {
+ // Return the master of the bridge(switch) if it exist or
+ // return the current leader
+ if (ovsdbNode.bridgeId() == DeviceId.NONE) {
+ return leadershipService.getLeader(this.appId.name());
+ } else {
+ return mastershipService.getMasterFor(ovsdbNode.bridgeId());
+ }
+ }
+
+ private void setPassiveMode(OvsdbNode ovsdbNode) {
+ // TODO: need ovsdb client implementation first
+ // TODO: set the remove ovsdb server passive mode
+ // TODO: set the node state READY if it succeed
+ }
+
+ private void connect(OvsdbNode ovsdbNode) {
+ // TODO: need ovsdb client implementation first
+ }
+
+ private void disconnect(OvsdbNode ovsdbNode) {
+ // TODO: need ovsdb client implementation first
+ }
+}
diff --git a/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/OvsdbNode.java b/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/OvsdbNode.java
new file mode 100644
index 00000000..bb2a0b7d
--- /dev/null
+++ b/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/OvsdbNode.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2014-2015 Open Networking Laboratory
+ *
+ * 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.onosproject.cordvtn;
+
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.TpPort;
+import org.onosproject.net.DeviceId;
+
+/**
+ * Representation of a node with ovsdb server.
+ */
+public interface OvsdbNode {
+ /**
+ * State of the ovsdb node.
+ */
+ enum State {
+ INIT, READY, CONNECTED, DISCONNECTED
+ }
+
+ /**
+ * Returns the IP address of ovsdb server.
+ *
+ * @return ip address
+ */
+ IpAddress ip();
+
+ /**
+ * Returns the port number of ovsdb server.
+ *
+ * @return port number
+ */
+ TpPort port();
+
+ /**
+ * Returns the hostname of the node.
+ *
+ * @return hostname
+ */
+ String hostname();
+
+ /**
+ * Returns the state of the node.
+ *
+ * @return state of the node
+ */
+ State state();
+
+ /**
+ * Returns the device ID of the node.
+ *
+ * @return device id
+ */
+ DeviceId deviceId();
+
+ /**
+ * Returns the device ID of the bridge associated with this node.
+ *
+ * @return device id
+ */
+ DeviceId bridgeId();
+}
diff --git a/framework/src/onos/apps/demo/cord-gui/pom.xml b/framework/src/onos/apps/demo/cord-gui/pom.xml
index eeda585a..16ed5d95 100644
--- a/framework/src/onos/apps/demo/cord-gui/pom.xml
+++ b/framework/src/onos/apps/demo/cord-gui/pom.xml
@@ -27,7 +27,7 @@
</parent>
<artifactId>cord-gui</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<packaging>war</packaging>
<description>Demo CORD Subscriber Web GUI</description>
diff --git a/framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunctionFactory.java b/framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunctionFactory.java
index a91dbfbf..dffabceb 100644
--- a/framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunctionFactory.java
+++ b/framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunctionFactory.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.cord.gui.model;
import com.fasterxml.jackson.databind.node.ArrayNode;
diff --git a/framework/src/onos/apps/demo/cord-gui/src/scripts/pullwar.sh b/framework/src/onos/apps/demo/cord-gui/src/scripts/pullwar.sh
index e7ad3322..d5a75289 100644
--- a/framework/src/onos/apps/demo/cord-gui/src/scripts/pullwar.sh
+++ b/framework/src/onos/apps/demo/cord-gui/src/scripts/pullwar.sh
@@ -1 +1 @@
-cp $ONOS_ROOT/apps/demo/cord-gui/target/cord-gui-1.3.0-SNAPSHOT.war .
+cp $ONOS_ROOT/apps/demo/cord-gui/target/cord-gui-1.4.0-SNAPSHOT.war .
diff --git a/framework/src/onos/apps/demo/cord-gui/src/scripts/run.me b/framework/src/onos/apps/demo/cord-gui/src/scripts/run.me
index db76fb6d..496b18e4 100644
--- a/framework/src/onos/apps/demo/cord-gui/src/scripts/run.me
+++ b/framework/src/onos/apps/demo/cord-gui/src/scripts/run.me
@@ -4,7 +4,7 @@
export LISTENPORT=8080
export JETTY="-jar jetty-runner.jar"
-export CORD=./cord-gui-1.3.0-SNAPSHOT.war
+export CORD=./cord-gui-1.4.0-SNAPSHOT.war
export LOGDBG=-Dorg.onosproject.cord.gui.LEVEL=DEBUG
export DEBUG="-Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n"
export LOG=cord.log
diff --git a/framework/src/onos/apps/dhcp/pom.xml b/framework/src/onos/apps/dhcp/pom.xml
index 13298163..0daa4f7b 100644
--- a/framework/src/onos/apps/dhcp/pom.xml
+++ b/framework/src/onos/apps/dhcp/pom.xml
@@ -21,7 +21,7 @@
<parent>
<artifactId>onos-apps</artifactId>
<groupId>org.onosproject</groupId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/DhcpService.java b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/DhcpService.java
index 20e1c614..7c2127f9 100644
--- a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/DhcpService.java
+++ b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/DhcpService.java
@@ -17,6 +17,7 @@ package org.onosproject.dhcp;
import org.onlab.packet.Ip4Address;
import org.onlab.packet.MacAddress;
+import org.onosproject.net.HostId;
import java.util.Map;
@@ -30,7 +31,7 @@ public interface DhcpService {
*
* @return collection of mappings.
*/
- Map<MacAddress, IpAssignment> listMapping();
+ Map<HostId, IpAssignment> listMapping();
/**
* Returns the default lease time granted by the DHCP Server.
diff --git a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/DhcpStore.java b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/DhcpStore.java
index 4e2d67d6..c9fade9e 100644
--- a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/DhcpStore.java
+++ b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/DhcpStore.java
@@ -17,6 +17,7 @@ package org.onosproject.dhcp;
import org.onlab.packet.Ip4Address;
import org.onlab.packet.MacAddress;
+import org.onosproject.net.HostId;
import java.util.Map;
@@ -36,21 +37,21 @@ public interface DhcpStore {
/**
* Returns an IP Address for a Mac ID, in response to a DHCP DISCOVER message.
*
- * @param macID Mac ID of the client requesting an IP
+ * @param hostId Host ID of the client requesting an IP
* @param requestedIP requested IP address
* @return IP address assigned to the Mac ID
*/
- Ip4Address suggestIP(MacAddress macID, Ip4Address requestedIP);
+ Ip4Address suggestIP(HostId hostId, Ip4Address requestedIP);
/**
* Assigns the requested IP to the Mac ID, in response to a DHCP REQUEST message.
*
- * @param macID Mac Id of the client requesting an IP
+ * @param hostId Host Id of the client requesting an IP
* @param ipAddr IP Address being requested
* @param leaseTime Lease time offered by the server for this mapping
* @return returns true if the assignment was successful, false otherwise
*/
- boolean assignIP(MacAddress macID, Ip4Address ipAddr, int leaseTime);
+ boolean assignIP(HostId hostId, Ip4Address ipAddr, int leaseTime);
/**
* Sets the default time for which suggested IP mappings are valid.
@@ -60,25 +61,25 @@ public interface DhcpStore {
void setDefaultTimeoutForPurge(int timeInSeconds);
/**
- * Sets the delay after which the dhcp server will purge expired entries.
+ * Releases the IP assigned to a Mac ID into the free pool.
*
- * @param timeInSeconds default time
+ * @param hostId the host ID for which the mapping needs to be changed
*/
- void setTimerDelay(int timeInSeconds);
+ void releaseIP(HostId hostId);
/**
- * Releases the IP assigned to a Mac ID into the free pool.
+ * Returns a collection of all the MacAddress to IPAddress mapping assigned to the hosts.
*
- * @param macID the macID for which the mapping needs to be changed
+ * @return the collection of the mappings
*/
- void releaseIP(MacAddress macID);
+ Map<HostId, IpAssignment> listAssignedMapping();
/**
* Returns a collection of all the MacAddress to IPAddress mapping.
*
* @return the collection of the mappings
*/
- Map<MacAddress, IpAssignment> listMapping();
+ Map<HostId, IpAssignment> listAllMapping();
/**
* Assigns the requested IP to the MAC ID (if available) for an indefinite period of time.
diff --git a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/IpAssignment.java b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/IpAssignment.java
index c8bd1906..9b3aa686 100644
--- a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/IpAssignment.java
+++ b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/IpAssignment.java
@@ -49,7 +49,7 @@ public final class IpAssignment {
/**
* IP mapping is no longer active.
*/
- Option_Expired;
+ Option_Expired
}
/**
@@ -100,10 +100,19 @@ public final class IpAssignment {
/**
* Returns the lease period of the IP assignment.
*
- * @return the lease period
+ * @return the lease period in seconds
*/
public int leasePeriod() {
- return (int) this.leasePeriod / 1000;
+ return (int) this.leasePeriod;
+ }
+
+ /**
+ * Returns the lease period of the IP assignment.
+ *
+ * @return the lease period in milliseconds
+ */
+ public int leasePeriodMs() {
+ return (int) this.leasePeriod * 1000;
}
@Override
@@ -155,7 +164,7 @@ public final class IpAssignment {
private Builder(IpAssignment ipAssignment) {
ipAddress = ipAssignment.ipAddress();
timeStamp = ipAssignment.timestamp();
- leasePeriod = ipAssignment.leasePeriod() * 1000;
+ leasePeriod = ipAssignment.leasePeriod();
assignmentStatus = ipAssignment.assignmentStatus();
}
@@ -178,7 +187,7 @@ public final class IpAssignment {
}
public Builder leasePeriod(int leasePeriodinSeconds) {
- leasePeriod = leasePeriodinSeconds * 1000;
+ leasePeriod = leasePeriodinSeconds;
return this;
}
diff --git a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/cli/DhcpListAllMappings.java b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/cli/DhcpListAllMappings.java
index fc470ce3..209ba683 100644
--- a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/cli/DhcpListAllMappings.java
+++ b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/cli/DhcpListAllMappings.java
@@ -16,10 +16,10 @@
package org.onosproject.dhcp.cli;
import org.apache.karaf.shell.commands.Command;
-import org.onlab.packet.MacAddress;
import org.onosproject.cli.AbstractShellCommand;
import org.onosproject.dhcp.DhcpService;
import org.onosproject.dhcp.IpAssignment;
+import org.onosproject.net.HostId;
import java.util.Map;
@@ -35,9 +35,9 @@ public class DhcpListAllMappings extends AbstractShellCommand {
protected void execute() {
DhcpService dhcpService = AbstractShellCommand.get(DhcpService.class);
- Map<MacAddress, IpAssignment> allocationMap = dhcpService.listMapping();
+ Map<HostId, IpAssignment> allocationMap = dhcpService.listMapping();
- for (Map.Entry<MacAddress, IpAssignment> entry : allocationMap.entrySet()) {
+ for (Map.Entry<HostId, IpAssignment> entry : allocationMap.entrySet()) {
print(DHCP_MAPPING_FORMAT, entry.getKey().toString(), entry.getValue().ipAddress().toString());
}
}
diff --git a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/cli/package-info.java b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/cli/package-info.java
new file mode 100644
index 00000000..f8780195
--- /dev/null
+++ b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/cli/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * CLI implementation for sample application that assigns and manages DHCP leases.
+ */
+package org.onosproject.dhcp.cli; \ No newline at end of file
diff --git a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpConfig.java b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpConfig.java
index f8d5e63b..4353d623 100644
--- a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpConfig.java
+++ b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpConfig.java
@@ -15,6 +15,8 @@
*/
package org.onosproject.dhcp.impl;
+import org.onlab.packet.Ip4Address;
+import org.onlab.packet.MacAddress;
import org.onosproject.core.ApplicationId;
import org.onosproject.net.config.Config;
import org.onosproject.net.config.basics.BasicElementConfig;
@@ -34,14 +36,21 @@ public class DhcpConfig extends Config<ApplicationId> {
public static final String LEASE_TIME = "lease";
public static final String RENEW_TIME = "renew";
public static final String REBIND_TIME = "rebind";
+ public static final String TIMER_DELAY = "delay";
+ public static final String DEFAULT_TIMEOUT = "timeout";
+ public static final String START_IP = "startip";
+ public static final String END_IP = "endip";
+
+ public static final int DEFAULT = -1;
/**
* Returns the dhcp server ip.
*
* @return ip address or null if not set
*/
- public String ip() {
- return get(MY_IP, null);
+ public Ip4Address ip() {
+ String ip = get(MY_IP, null);
+ return ip != null ? Ip4Address.valueOf(ip) : null;
}
/**
@@ -59,8 +68,9 @@ public class DhcpConfig extends Config<ApplicationId> {
*
* @return server mac or null if not set
*/
- public String mac() {
- return get(MY_MAC, null);
+ public MacAddress mac() {
+ String mac = get(MY_MAC, null);
+ return mac != null ? MacAddress.valueOf(mac) : null;
}
/**
@@ -78,8 +88,9 @@ public class DhcpConfig extends Config<ApplicationId> {
*
* @return subnet mask or null if not set
*/
- public String subnetMask() {
- return get(SUBNET_MASK, null);
+ public Ip4Address subnetMask() {
+ String ip = get(SUBNET_MASK, null);
+ return ip != null ? Ip4Address.valueOf(ip) : null;
}
/**
@@ -97,8 +108,9 @@ public class DhcpConfig extends Config<ApplicationId> {
*
* @return broadcast address or null if not set
*/
- public String broadcastAddress() {
- return get(BROADCAST_ADDRESS, null);
+ public Ip4Address broadcastAddress() {
+ String ip = get(BROADCAST_ADDRESS, null);
+ return ip != null ? Ip4Address.valueOf(ip) : null;
}
/**
@@ -114,10 +126,10 @@ public class DhcpConfig extends Config<ApplicationId> {
/**
* Returns the Time To Live for the reply packets.
*
- * @return ttl or null if not set
+ * @return ttl or -1 if not set
*/
- public String ttl() {
- return get(TTL, null);
+ public int ttl() {
+ return get(TTL, DEFAULT);
}
/**
@@ -126,17 +138,17 @@ public class DhcpConfig extends Config<ApplicationId> {
* @param ttl new ttl; null to clear
* @return self
*/
- public BasicElementConfig ttl(String ttl) {
+ public BasicElementConfig ttl(int ttl) {
return (BasicElementConfig) setOrClear(TTL, ttl);
}
/**
* Returns the Lease Time offered by the DHCP Server.
*
- * @return lease time or null if not set
+ * @return lease time or -1 if not set
*/
- public String leaseTime() {
- return get(LEASE_TIME, null);
+ public int leaseTime() {
+ return get(LEASE_TIME, DEFAULT);
}
/**
@@ -145,17 +157,17 @@ public class DhcpConfig extends Config<ApplicationId> {
* @param lease new lease time; null to clear
* @return self
*/
- public BasicElementConfig leaseTime(String lease) {
+ public BasicElementConfig leaseTime(int lease) {
return (BasicElementConfig) setOrClear(LEASE_TIME, lease);
}
/**
* Returns the Renew Time offered by the DHCP Server.
*
- * @return renew time or null if not set
+ * @return renew time or -1 if not set
*/
- public String renewTime() {
- return get(RENEW_TIME, null);
+ public int renewTime() {
+ return get(RENEW_TIME, DEFAULT);
}
/**
@@ -164,17 +176,17 @@ public class DhcpConfig extends Config<ApplicationId> {
* @param renew new renew time; null to clear
* @return self
*/
- public BasicElementConfig renewTime(String renew) {
+ public BasicElementConfig renewTime(int renew) {
return (BasicElementConfig) setOrClear(RENEW_TIME, renew);
}
/**
* Returns the Rebind Time offered by the DHCP Server.
*
- * @return rebind time or null if not set
+ * @return rebind time or -1 if not set
*/
- public String rebindTime() {
- return get(REBIND_TIME, null);
+ public int rebindTime() {
+ return get(REBIND_TIME, DEFAULT);
}
/**
@@ -183,7 +195,7 @@ public class DhcpConfig extends Config<ApplicationId> {
* @param rebind new rebind time; null to clear
* @return self
*/
- public BasicElementConfig rebindTime(String rebind) {
+ public BasicElementConfig rebindTime(int rebind) {
return (BasicElementConfig) setOrClear(REBIND_TIME, rebind);
}
@@ -192,8 +204,9 @@ public class DhcpConfig extends Config<ApplicationId> {
*
* @return router address or null if not set
*/
- public String routerAddress() {
- return get(ROUTER_ADDRESS, null);
+ public Ip4Address routerAddress() {
+ String ip = get(ROUTER_ADDRESS, null);
+ return ip != null ? Ip4Address.valueOf(ip) : null;
}
/**
@@ -211,8 +224,9 @@ public class DhcpConfig extends Config<ApplicationId> {
*
* @return domain server address or null if not set
*/
- public String domainServer() {
- return get(DOMAIN_SERVER, null);
+ public Ip4Address domainServer() {
+ String ip = get(DOMAIN_SERVER, null);
+ return ip != null ? Ip4Address.valueOf(ip) : null;
}
/**
@@ -224,4 +238,82 @@ public class DhcpConfig extends Config<ApplicationId> {
public BasicElementConfig domainServer(String domain) {
return (BasicElementConfig) setOrClear(DOMAIN_SERVER, domain);
}
+
+ /**
+ * Returns the delay in minutes after which the dhcp server will purge expired entries.
+ *
+ * @return time delay or -1 if not set
+ */
+ public int timerDelay() {
+ return get(TIMER_DELAY, DEFAULT);
+ }
+
+ /**
+ * Sets the delay after which the dhcp server will purge expired entries.
+ *
+ * @param delay new time delay; null to clear
+ * @return self
+ */
+ public BasicElementConfig timerDelay(int delay) {
+ return (BasicElementConfig) setOrClear(TIMER_DELAY, delay);
+ }
+
+ /**
+ * Returns the default timeout for pending assignments.
+ *
+ * @return default timeout or -1 if not set
+ */
+ public int defaultTimeout() {
+ return get(DEFAULT_TIMEOUT, DEFAULT);
+ }
+
+ /**
+ * Sets the default timeout for pending assignments.
+ *
+ * @param defaultTimeout new default timeout; null to clear
+ * @return self
+ */
+ public BasicElementConfig defaultTimeout(int defaultTimeout) {
+ return (BasicElementConfig) setOrClear(DEFAULT_TIMEOUT, defaultTimeout);
+ }
+
+ /**
+ * Returns the start IP for the available IP Range.
+ *
+ * @return start IP or null if not set
+ */
+ public Ip4Address startIp() {
+ String ip = get(START_IP, null);
+ return ip != null ? Ip4Address.valueOf(ip) : null;
+ }
+
+ /**
+ * Sets the start IP for the available IP Range.
+ *
+ * @param startIp new start IP; null to clear
+ * @return self
+ */
+ public BasicElementConfig startIp(String startIp) {
+ return (BasicElementConfig) setOrClear(START_IP, startIp);
+ }
+
+ /**
+ * Returns the end IP for the available IP Range.
+ *
+ * @return end IP or null if not set
+ */
+ public Ip4Address endIp() {
+ String ip = get(END_IP, null);
+ return ip != null ? Ip4Address.valueOf(ip) : null;
+ }
+
+ /**
+ * Sets the end IP for the available IP Range.
+ *
+ * @param endIp new end IP; null to clear
+ * @return self
+ */
+ public BasicElementConfig endIp(String endIp) {
+ return (BasicElementConfig) setOrClear(END_IP, endIp);
+ }
}
diff --git a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java
index 24cb0878..345d5ad0 100644
--- a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java
+++ b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java
@@ -22,6 +22,8 @@ import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
+import org.jboss.netty.util.Timeout;
+import org.jboss.netty.util.TimerTask;
import org.onlab.packet.ARP;
import org.onlab.packet.DHCP;
import org.onlab.packet.DHCPOption;
@@ -34,20 +36,20 @@ import org.onlab.packet.MacAddress;
import org.onlab.packet.TpPort;
import org.onlab.packet.UDP;
import org.onlab.packet.VlanId;
+import org.onlab.util.Timer;
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
import org.onosproject.dhcp.DhcpService;
import org.onosproject.dhcp.DhcpStore;
import org.onosproject.dhcp.IpAssignment;
-import org.onosproject.net.config.ConfigFactory;
-import org.onosproject.net.config.NetworkConfigEvent;
-import org.onosproject.net.config.NetworkConfigListener;
-import org.onosproject.net.config.NetworkConfigRegistry;
-
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.Host;
import org.onosproject.net.HostId;
import org.onosproject.net.HostLocation;
+import org.onosproject.net.config.ConfigFactory;
+import org.onosproject.net.config.NetworkConfigEvent;
+import org.onosproject.net.config.NetworkConfigListener;
+import org.onosproject.net.config.NetworkConfigRegistry;
import org.onosproject.net.flow.DefaultTrafficSelector;
import org.onosproject.net.flow.DefaultTrafficTreatment;
import org.onosproject.net.flow.TrafficSelector;
@@ -68,10 +70,13 @@ import org.slf4j.LoggerFactory;
import java.nio.ByteBuffer;
import java.util.ArrayList;
+import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
+import java.util.concurrent.TimeUnit;
import static org.onlab.packet.MacAddress.valueOf;
import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
@@ -86,7 +91,7 @@ public class DhcpManager implements DhcpService {
private static final ProviderId PID = new ProviderId("of", "org.onosproject.dhcp", true);
private final Logger log = LoggerFactory.getLogger(getClass());
- private final NetworkConfigListener cfgListener = new InternalConfigListener();
+ private final InternalConfigListener cfgListener = new InternalConfigListener();
private final Set<ConfigFactory> factories = ImmutableSet.of(
new ConfigFactory<ApplicationId, DhcpConfig>(APP_SUBJECT_FACTORY,
@@ -96,14 +101,6 @@ public class DhcpManager implements DhcpService {
public DhcpConfig createConfig() {
return new DhcpConfig();
}
- },
- new ConfigFactory<ApplicationId, DhcpStoreConfig>(APP_SUBJECT_FACTORY,
- DhcpStoreConfig.class,
- "dhcpstore") {
- @Override
- public DhcpStoreConfig createConfig() {
- return new DhcpStoreConfig();
- }
}
);
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -125,11 +122,13 @@ public class DhcpManager implements DhcpService {
protected HostProviderService hostProviderService;
+ private final HostProvider hostProvider = new InternalHostProvider();
+
private ApplicationId appId;
// Hardcoded values are default values.
- private static String myIP = "10.0.0.2";
+ private static Ip4Address myIP = Ip4Address.valueOf("10.0.0.2");
private static MacAddress myMAC = valueOf("4f:4f:4f:4f:4f:4f");
@@ -147,14 +146,17 @@ public class DhcpManager implements DhcpService {
private static byte packetTTL = (byte) 127;
- private static String subnetMask = "255.0.0.0";
+ private static Ip4Address subnetMask = Ip4Address.valueOf("255.0.0.0");
- private static String broadcastAddress = "10.255.255.255";
+ private static Ip4Address broadcastAddress = Ip4Address.valueOf("10.255.255.255");
- private static String routerAddress = "10.0.0.2";
+ private static Ip4Address routerAddress = Ip4Address.valueOf("10.0.0.2");
- private static String domainServer = "10.0.0.2";
- private final HostProvider hostProvider = new InternalHostProvider();
+ private static Ip4Address domainServer = Ip4Address.valueOf("10.0.0.2");
+
+ protected Timeout timeout;
+
+ protected static int timerDelay = 2;
@Activate
protected void activate() {
@@ -163,9 +165,12 @@ public class DhcpManager implements DhcpService {
cfgService.addListener(cfgListener);
factories.forEach(cfgService::registerConfigFactory);
+ cfgListener.reconfigureNetwork(cfgService.getConfig(appId, DhcpConfig.class));
+
hostProviderService = hostProviderRegistry.register(hostProvider);
- packetService.addProcessor(processor, PacketProcessor.observer(1));
+ packetService.addProcessor(processor, PacketProcessor.director(0));
requestPackets();
+ timeout = Timer.getTimer().newTimeout(new PurgeListTask(), timerDelay, TimeUnit.MINUTES);
log.info("Started");
}
@@ -177,6 +182,7 @@ public class DhcpManager implements DhcpService {
hostProviderRegistry.unregister(hostProvider);
hostProviderService = null;
cancelPackets();
+ timeout.cancel();
log.info("Stopped");
}
@@ -214,8 +220,8 @@ public class DhcpManager implements DhcpService {
}
@Override
- public Map<MacAddress, IpAssignment> listMapping() {
- return dhcpStore.listMapping();
+ public Map<HostId, IpAssignment> listMapping() {
+ return dhcpStore.listAssignedMapping();
}
@Override
@@ -258,9 +264,7 @@ public class DhcpManager implements DhcpService {
* @param outgoingMessageType the message type of the outgoing packet
* @return the Ethernet reply frame
*/
- private Ethernet buildReply(Ethernet packet, String ipOffered, byte outgoingMessageType) {
- Ip4Address myIPAddress = Ip4Address.valueOf(myIP);
- Ip4Address ipAddress;
+ private Ethernet buildReply(Ethernet packet, Ip4Address ipOffered, byte outgoingMessageType) {
// Ethernet Frame.
Ethernet ethReply = new Ethernet();
@@ -272,9 +276,8 @@ public class DhcpManager implements DhcpService {
// IP Packet
IPv4 ipv4Packet = (IPv4) packet.getPayload();
IPv4 ipv4Reply = new IPv4();
- ipv4Reply.setSourceAddress(myIPAddress.toInt());
- ipAddress = Ip4Address.valueOf(ipOffered);
- ipv4Reply.setDestinationAddress(ipAddress.toInt());
+ ipv4Reply.setSourceAddress(myIP.toInt());
+ ipv4Reply.setDestinationAddress(ipOffered.toInt());
ipv4Reply.setTtl(packetTTL);
// UDP Datagram.
@@ -288,9 +291,8 @@ public class DhcpManager implements DhcpService {
DHCP dhcpReply = new DHCP();
dhcpReply.setOpCode(DHCP.OPCODE_REPLY);
- ipAddress = Ip4Address.valueOf(ipOffered);
- dhcpReply.setYourIPAddress(ipAddress.toInt());
- dhcpReply.setServerIPAddress(myIPAddress.toInt());
+ dhcpReply.setYourIPAddress(ipOffered.toInt());
+ dhcpReply.setServerIPAddress(myIP.toInt());
dhcpReply.setTransactionId(dhcpPacket.getTransactionId());
dhcpReply.setClientHardwareAddress(dhcpPacket.getClientHardwareAddress());
@@ -312,7 +314,7 @@ public class DhcpManager implements DhcpService {
option = new DHCPOption();
option.setCode(DHCP.DHCPOptionCode.OptionCode_DHCPServerIp.getValue());
option.setLength((byte) 4);
- option.setData(myIPAddress.toOctets());
+ option.setData(myIP.toOctets());
optionList.add(option);
// IP Address Lease Time.
@@ -340,32 +342,28 @@ public class DhcpManager implements DhcpService {
option = new DHCPOption();
option.setCode(DHCP.DHCPOptionCode.OptionCode_SubnetMask.getValue());
option.setLength((byte) 4);
- ipAddress = Ip4Address.valueOf(subnetMask);
- option.setData(ipAddress.toOctets());
+ option.setData(subnetMask.toOctets());
optionList.add(option);
// Broadcast Address.
option = new DHCPOption();
option.setCode(DHCP.DHCPOptionCode.OptionCode_BroadcastAddress.getValue());
option.setLength((byte) 4);
- ipAddress = Ip4Address.valueOf(broadcastAddress);
- option.setData(ipAddress.toOctets());
+ option.setData(broadcastAddress.toOctets());
optionList.add(option);
// Router Address.
option = new DHCPOption();
option.setCode(DHCP.DHCPOptionCode.OptionCode_RouterAddress.getValue());
option.setLength((byte) 4);
- ipAddress = Ip4Address.valueOf(routerAddress);
- option.setData(ipAddress.toOctets());
+ option.setData(routerAddress.toOctets());
optionList.add(option);
// DNS Server Address.
option = new DHCPOption();
option.setCode(DHCP.DHCPOptionCode.OptionCode_DomainServer.getValue());
option.setLength((byte) 4);
- ipAddress = Ip4Address.valueOf(domainServer);
- option.setData(ipAddress.toOctets());
+ option.setData(domainServer.toOctets());
optionList.add(option);
// End Option.
@@ -394,7 +392,7 @@ public class DhcpManager implements DhcpService {
TrafficTreatment.Builder builder = DefaultTrafficTreatment.builder();
ConnectPoint sourcePoint = context.inPacket().receivedFrom();
builder.setOutput(sourcePoint.port());
-
+ context.block();
packetService.emit(new DefaultOutboundPacket(sourcePoint.deviceId(),
builder.build(), ByteBuffer.wrap(reply.serialize())));
}
@@ -407,7 +405,6 @@ public class DhcpManager implements DhcpService {
* @param dhcpPayload the extracted DHCP payload
*/
private void processDHCPPacket(PacketContext context, DHCP dhcpPayload) {
-
Ethernet packet = context.inPacket().parsed();
boolean flagIfRequestedIP = false;
boolean flagIfServerIP = false;
@@ -416,12 +413,11 @@ public class DhcpManager implements DhcpService {
if (dhcpPayload != null) {
- // TODO Convert this to enum value.
- byte incomingPacketType = 0;
+ DHCPPacketType incomingPacketType = DHCPPacketType.getType(0);
for (DHCPOption option : dhcpPayload.getOptions()) {
if (option.getCode() == DHCP.DHCPOptionCode.OptionCode_MessageType.getValue()) {
byte[] data = option.getData();
- incomingPacketType = data[0];
+ incomingPacketType = DHCPPacketType.getType(data[0]);
}
if (option.getCode() == DHCP.DHCPOptionCode.OptionCode_RequestedIP.getValue()) {
byte[] data = option.getData();
@@ -434,37 +430,39 @@ public class DhcpManager implements DhcpService {
flagIfServerIP = true;
}
}
-
- String ipOffered = "";
DHCPPacketType outgoingPacketType;
MacAddress clientMAC = new MacAddress(dhcpPayload.getClientHardwareAddress());
+ VlanId vlanId = VlanId.vlanId(packet.getVlanID());
+ HostId hostId = HostId.hostId(clientMAC, vlanId);
- if (incomingPacketType == DHCPPacketType.DHCPDISCOVER.getValue()) {
+ if (incomingPacketType.getValue() == DHCPPacketType.DHCPDISCOVER.getValue()) {
outgoingPacketType = DHCPPacketType.DHCPOFFER;
- ipOffered = dhcpStore.suggestIP(clientMAC, requestedIP).toString();
-
- Ethernet ethReply = buildReply(packet, ipOffered, (byte) outgoingPacketType.getValue());
- sendReply(context, ethReply);
+ Ip4Address ipOffered = dhcpStore.suggestIP(hostId, requestedIP);
+ if (ipOffered != null) {
+ Ethernet ethReply = buildReply(packet, ipOffered,
+ (byte) outgoingPacketType.getValue());
+ sendReply(context, ethReply);
+ }
- } else if (incomingPacketType == DHCPPacketType.DHCPREQUEST.getValue()) {
+ } else if (incomingPacketType.getValue() == DHCPPacketType.DHCPREQUEST.getValue()) {
outgoingPacketType = DHCPPacketType.DHCPACK;
if (flagIfServerIP && flagIfRequestedIP) {
// SELECTING state
- if (myIP.equals(serverIP.toString()) &&
- dhcpStore.assignIP(clientMAC, requestedIP, leaseTime)) {
+ if (myIP.equals(serverIP) &&
+ dhcpStore.assignIP(hostId, requestedIP, leaseTime)) {
- Ethernet ethReply = buildReply(packet, requestedIP.toString(),
+ Ethernet ethReply = buildReply(packet, requestedIP,
(byte) outgoingPacketType.getValue());
sendReply(context, ethReply);
discoverHost(context, requestedIP);
}
} else if (flagIfRequestedIP) {
// INIT-REBOOT state
- if (dhcpStore.assignIP(clientMAC, requestedIP, leaseTime)) {
- Ethernet ethReply = buildReply(packet, requestedIP.toString(),
+ if (dhcpStore.assignIP(hostId, requestedIP, leaseTime)) {
+ Ethernet ethReply = buildReply(packet, requestedIP,
(byte) outgoingPacketType.getValue());
sendReply(context, ethReply);
discoverHost(context, requestedIP);
@@ -474,17 +472,16 @@ public class DhcpManager implements DhcpService {
int ciaadr = dhcpPayload.getClientIPAddress();
if (ciaadr != 0) {
Ip4Address clientIaddr = Ip4Address.valueOf(ciaadr);
- if (dhcpStore.assignIP(clientMAC, clientIaddr, leaseTime)) {
- Ethernet ethReply = buildReply(packet, clientIaddr.toString(),
+ if (dhcpStore.assignIP(hostId, clientIaddr, leaseTime)) {
+ Ethernet ethReply = buildReply(packet, clientIaddr,
(byte) outgoingPacketType.getValue());
sendReply(context, ethReply);
discoverHost(context, clientIaddr);
}
}
}
- } else if (incomingPacketType == DHCPPacketType.DHCPRELEASE.getValue()) {
-
- dhcpStore.releaseIP(clientMAC);
+ } else if (incomingPacketType.getValue() == DHCPPacketType.DHCPRELEASE.getValue()) {
+ dhcpStore.releaseIP(hostId);
}
}
}
@@ -540,7 +537,6 @@ public class DhcpManager implements DhcpService {
@Override
public void process(PacketContext context) {
-
Ethernet packet = context.inPacket().parsed();
if (packet == null) {
return;
@@ -564,7 +560,7 @@ public class DhcpManager implements DhcpService {
ARP arpPacket = (ARP) packet.getPayload();
if ((arpPacket.getOpCode() == ARP.OP_REQUEST) &&
- (Ip4Address.valueOf(arpPacket.getTargetProtocolAddress()).toString().equals(myIP))) {
+ Objects.equals(myIP, Ip4Address.valueOf(arpPacket.getTargetProtocolAddress()))) {
processARPPacket(context, packet);
@@ -581,12 +577,14 @@ public class DhcpManager implements DhcpService {
* @param cfg configuration object
*/
private void reconfigureNetwork(DhcpConfig cfg) {
-
+ if (cfg == null) {
+ return;
+ }
if (cfg.ip() != null) {
myIP = cfg.ip();
}
if (cfg.mac() != null) {
- myMAC = MacAddress.valueOf(cfg.mac());
+ myMAC = cfg.mac();
}
if (cfg.subnetMask() != null) {
subnetMask = cfg.subnetMask();
@@ -600,54 +598,40 @@ public class DhcpManager implements DhcpService {
if (cfg.domainServer() != null) {
domainServer = cfg.domainServer();
}
- if (cfg.ttl() != null) {
- packetTTL = Byte.valueOf(cfg.ttl());
+ if (cfg.ttl() != -1) {
+ packetTTL = (byte) cfg.ttl();
}
- if (cfg.leaseTime() != null) {
- leaseTime = Integer.valueOf(cfg.leaseTime());
+ if (cfg.leaseTime() != -1) {
+ leaseTime = cfg.leaseTime();
}
- if (cfg.renewTime() != null) {
- renewalTime = Integer.valueOf(cfg.renewTime());
+ if (cfg.renewTime() != -1) {
+ renewalTime = cfg.renewTime();
}
- if (cfg.rebindTime() != null) {
- rebindingTime = Integer.valueOf(cfg.rebindTime());
+ if (cfg.rebindTime() != -1) {
+ rebindingTime = cfg.rebindTime();
}
- }
-
- /**
- * Reconfigures the DHCP Store according to the configuration parameters passed.
- *
- * @param cfg configuration object
- */
- private void reconfigureStore(DhcpStoreConfig cfg) {
-
- if (cfg.defaultTimeout() != null) {
- dhcpStore.setDefaultTimeoutForPurge(Integer.valueOf(cfg.defaultTimeout()));
+ if (cfg.defaultTimeout() != -1) {
+ dhcpStore.setDefaultTimeoutForPurge(cfg.defaultTimeout());
}
- if (cfg.timerDelay() != null) {
- dhcpStore.setTimerDelay(Integer.valueOf(cfg.defaultTimeout()));
+ if (cfg.timerDelay() != -1) {
+ timerDelay = cfg.timerDelay();
}
- if ((cfg.startIP() != null) && (cfg.endIP() != null)) {
- dhcpStore.populateIPPoolfromRange(Ip4Address.valueOf(cfg.startIP()),
- Ip4Address.valueOf(cfg.endIP()));
+ if ((cfg.startIp() != null) && (cfg.endIp() != null)) {
+ dhcpStore.populateIPPoolfromRange(cfg.startIp(), cfg.endIp());
}
}
+
@Override
public void event(NetworkConfigEvent event) {
if ((event.type() == NetworkConfigEvent.Type.CONFIG_ADDED ||
- event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED)) {
- if (event.configClass().equals(DhcpConfig.class)) {
- DhcpConfig cfg = cfgService.getConfig(appId, DhcpConfig.class);
- reconfigureNetwork(cfg);
- log.info("Reconfigured Manager");
- }
- if (event.configClass().equals(DhcpStoreConfig.class)) {
- DhcpStoreConfig cfg = cfgService.getConfig(appId, DhcpStoreConfig.class);
- reconfigureStore(cfg);
- log.info("Reconfigured Store");
- }
+ event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED) &&
+ event.configClass().equals(DhcpConfig.class)) {
+
+ DhcpConfig cfg = cfgService.getConfig(appId, DhcpConfig.class);
+ reconfigureNetwork(cfg);
+ log.info("Reconfigured");
}
}
}
@@ -666,4 +650,28 @@ public class DhcpManager implements DhcpService {
// nothing to do
}
}
+
+ private class PurgeListTask implements TimerTask {
+
+ @Override
+ public void run(Timeout to) {
+ IpAssignment ipAssignment;
+ Date dateNow = new Date();
+
+ Map<HostId, IpAssignment> ipAssignmentMap = dhcpStore.listAllMapping();
+ for (Map.Entry<HostId, IpAssignment> entry: ipAssignmentMap.entrySet()) {
+ ipAssignment = entry.getValue();
+
+ long timeLapsed = dateNow.getTime() - ipAssignment.timestamp().getTime();
+ if ((ipAssignment.assignmentStatus() != IpAssignment.AssignmentStatus.Option_Expired) &&
+ (ipAssignment.leasePeriod() > 0) && (timeLapsed > (ipAssignment.leasePeriodMs()))) {
+
+ dhcpStore.releaseIP(entry.getKey());
+ // TODO remove only the IP from the host entry when the API is in place.
+ hostProviderService.hostVanished(entry.getKey());
+ }
+ }
+ timeout = Timer.getTimer().newTimeout(new PurgeListTask(), timerDelay, TimeUnit.MINUTES);
+ }
+ }
} \ No newline at end of file
diff --git a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpViewMessageHandler.java b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpViewMessageHandler.java
index 89ed5720..9ce65d5e 100644
--- a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpViewMessageHandler.java
+++ b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpViewMessageHandler.java
@@ -17,10 +17,10 @@ package org.onosproject.dhcp.impl;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.ImmutableSet;
-import org.onlab.packet.MacAddress;
import org.onosproject.cli.AbstractShellCommand;
import org.onosproject.dhcp.DhcpService;
import org.onosproject.dhcp.IpAssignment;
+import org.onosproject.net.HostId;
import org.onosproject.ui.RequestHandler;
import org.onosproject.ui.UiMessageHandler;
import org.onosproject.ui.table.TableModel;
@@ -39,12 +39,12 @@ public class DhcpViewMessageHandler extends UiMessageHandler {
private static final String DHCP_DATA_RESP = "dhcpDataResponse";
private static final String DHCP = "dhcps";
- private static final String MAC = "mac";
+ private static final String HOST = "host";
private static final String IP = "ip";
private static final String LEASE = "lease";
private static final String[] COL_IDS = {
- MAC, IP, LEASE
+ HOST, IP, LEASE
};
@Override
@@ -54,6 +54,7 @@ public class DhcpViewMessageHandler extends UiMessageHandler {
);
}
+ // handler for dhcp table requests
private final class DataRequestHandler extends TableRequestHandler {
private DataRequestHandler() {
@@ -62,7 +63,7 @@ public class DhcpViewMessageHandler extends UiMessageHandler {
@Override
protected String defaultColumnId() {
- return MAC;
+ return HOST;
}
@Override
@@ -73,21 +74,21 @@ public class DhcpViewMessageHandler extends UiMessageHandler {
@Override
protected void populateTable(TableModel tm, ObjectNode payload) {
DhcpService dhcpService = AbstractShellCommand.get(DhcpService.class);
- Map<MacAddress, IpAssignment> allocationMap = dhcpService.listMapping();
+ Map<HostId, IpAssignment> allocationMap = dhcpService.listMapping();
- for (Map.Entry<MacAddress, IpAssignment> entry : allocationMap.entrySet()) {
+ for (Map.Entry<HostId, IpAssignment> entry : allocationMap.entrySet()) {
populateRow(tm.addRow(), entry);
}
}
- private void populateRow(TableModel.Row row, Map.Entry<MacAddress, IpAssignment> entry) {
+ private void populateRow(TableModel.Row row, Map.Entry<HostId, IpAssignment> entry) {
if (entry.getValue().leasePeriod() > 0) {
Date now = new Date(entry.getValue().timestamp().getTime() + entry.getValue().leasePeriod());
- row.cell(MAC, entry.getKey())
+ row.cell(HOST, entry.getKey())
.cell(IP, entry.getValue().ipAddress())
.cell(LEASE, now.toString());
} else {
- row.cell(MAC, entry.getKey())
+ row.cell(HOST, entry.getKey())
.cell(IP, entry.getValue().ipAddress())
.cell(LEASE, "Infinite Static Lease");
}
diff --git a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DistributedDhcpStore.java b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DistributedDhcpStore.java
index 6e29216a..dbdadb34 100644
--- a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DistributedDhcpStore.java
+++ b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DistributedDhcpStore.java
@@ -22,14 +22,12 @@ import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
-import org.jboss.netty.util.Timeout;
-import org.jboss.netty.util.TimerTask;
import org.onlab.packet.Ip4Address;
import org.onlab.packet.MacAddress;
import org.onlab.util.KryoNamespace;
-import org.onlab.util.Timer;
import org.onosproject.dhcp.DhcpStore;
import org.onosproject.dhcp.IpAssignment;
+import org.onosproject.net.HostId;
import org.onosproject.store.serializers.KryoNamespaces;
import org.onosproject.store.service.ConsistentMap;
import org.onosproject.store.service.DistributedSet;
@@ -42,7 +40,7 @@ import org.slf4j.LoggerFactory;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
-import java.util.concurrent.TimeUnit;
+import java.util.Objects;
/**
* Manages the pool of available IP Addresses in the network and
@@ -58,25 +56,21 @@ public class DistributedDhcpStore implements DhcpStore {
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected StorageService storageService;
- private ConsistentMap<MacAddress, IpAssignment> allocationMap;
+ private ConsistentMap<HostId, IpAssignment> allocationMap;
private DistributedSet<Ip4Address> freeIPPool;
- private Timeout timeout;
-
private static Ip4Address startIPRange;
private static Ip4Address endIPRange;
// Hardcoded values are default values.
- private static int timerDelay = 2;
-
private static int timeoutForPendingAssignments = 60;
@Activate
protected void activate() {
- allocationMap = storageService.<MacAddress, IpAssignment>consistentMapBuilder()
+ allocationMap = storageService.<HostId, IpAssignment>consistentMapBuilder()
.withName("onos-dhcp-assignedIP")
.withSerializer(Serializer.using(
new KryoNamespace.Builder()
@@ -94,30 +88,27 @@ public class DistributedDhcpStore implements DhcpStore {
.withSerializer(Serializer.using(KryoNamespaces.API))
.build();
- timeout = Timer.getTimer().newTimeout(new PurgeListTask(), timerDelay, TimeUnit.MINUTES);
-
log.info("Started");
}
@Deactivate
protected void deactivate() {
- timeout.cancel();
log.info("Stopped");
}
@Override
- public Ip4Address suggestIP(MacAddress macID, Ip4Address requestedIP) {
+ public Ip4Address suggestIP(HostId hostId, Ip4Address requestedIP) {
IpAssignment assignmentInfo;
- if (allocationMap.containsKey(macID)) {
- assignmentInfo = allocationMap.get(macID).value();
+ if (allocationMap.containsKey(hostId)) {
+ assignmentInfo = allocationMap.get(hostId).value();
IpAssignment.AssignmentStatus status = assignmentInfo.assignmentStatus();
Ip4Address ipAddr = assignmentInfo.ipAddress();
if (status == IpAssignment.AssignmentStatus.Option_Assigned ||
status == IpAssignment.AssignmentStatus.Option_Requested) {
// Client has a currently Active Binding.
- if ((ipAddr.toInt() > startIPRange.toInt()) && (ipAddr.toInt() < endIPRange.toInt())) {
+ if (ipWithinRange(ipAddr)) {
return ipAddr;
}
@@ -131,13 +122,11 @@ public class DistributedDhcpStore implements DhcpStore {
.assignmentStatus(IpAssignment.AssignmentStatus.Option_Requested)
.build();
if (freeIPPool.remove(ipAddr)) {
- allocationMap.put(macID, assignmentInfo);
+ allocationMap.put(hostId, assignmentInfo);
return ipAddr;
}
}
}
- return assignmentInfo.ipAddress();
-
} else if (requestedIP.toInt() != 0) {
// Client has requested an IP.
if (freeIPPool.contains(requestedIP)) {
@@ -148,7 +137,7 @@ public class DistributedDhcpStore implements DhcpStore {
.assignmentStatus(IpAssignment.AssignmentStatus.Option_Requested)
.build();
if (freeIPPool.remove(requestedIP)) {
- allocationMap.put(macID, assignmentInfo);
+ allocationMap.put(hostId, assignmentInfo);
return requestedIP;
}
}
@@ -156,35 +145,56 @@ public class DistributedDhcpStore implements DhcpStore {
// Allocate a new IP from the server's pool of available IP.
Ip4Address nextIPAddr = fetchNextIP();
- assignmentInfo = IpAssignment.builder()
- .ipAddress(nextIPAddr)
- .timestamp(new Date())
- .leasePeriod(timeoutForPendingAssignments)
- .assignmentStatus(IpAssignment.AssignmentStatus.Option_Requested)
- .build();
+ if (nextIPAddr != null) {
+ assignmentInfo = IpAssignment.builder()
+ .ipAddress(nextIPAddr)
+ .timestamp(new Date())
+ .leasePeriod(timeoutForPendingAssignments)
+ .assignmentStatus(IpAssignment.AssignmentStatus.Option_Requested)
+ .build();
- allocationMap.put(macID, assignmentInfo);
+ allocationMap.put(hostId, assignmentInfo);
+ }
return nextIPAddr;
}
@Override
- public boolean assignIP(MacAddress macID, Ip4Address ipAddr, int leaseTime) {
+ public boolean assignIP(HostId hostId, Ip4Address ipAddr, int leaseTime) {
IpAssignment assignmentInfo;
- if (allocationMap.containsKey(macID)) {
- assignmentInfo = allocationMap.get(macID).value();
- if ((assignmentInfo.ipAddress().toInt() == ipAddr.toInt()) &&
- (ipAddr.toInt() > startIPRange.toInt()) && (ipAddr.toInt() < endIPRange.toInt())) {
+ if (allocationMap.containsKey(hostId)) {
+ assignmentInfo = allocationMap.get(hostId).value();
+ IpAssignment.AssignmentStatus status = assignmentInfo.assignmentStatus();
- assignmentInfo = IpAssignment.builder()
- .ipAddress(ipAddr)
- .timestamp(new Date())
- .leasePeriod(leaseTime)
- .assignmentStatus(IpAssignment.AssignmentStatus.Option_Assigned)
- .build();
- allocationMap.put(macID, assignmentInfo);
- return true;
+ if (Objects.equals(assignmentInfo.ipAddress(), ipAddr) && ipWithinRange(ipAddr)) {
+
+ if (status == IpAssignment.AssignmentStatus.Option_Assigned ||
+ status == IpAssignment.AssignmentStatus.Option_Requested) {
+ // Client has a currently active binding with the server.
+ assignmentInfo = IpAssignment.builder()
+ .ipAddress(ipAddr)
+ .timestamp(new Date())
+ .leasePeriod(leaseTime)
+ .assignmentStatus(IpAssignment.AssignmentStatus.Option_Assigned)
+ .build();
+ allocationMap.put(hostId, assignmentInfo);
+ return true;
+ } else if (status == IpAssignment.AssignmentStatus.Option_Expired) {
+ // Client has an expired binding with the server.
+ if (freeIPPool.contains(ipAddr)) {
+ assignmentInfo = IpAssignment.builder()
+ .ipAddress(ipAddr)
+ .timestamp(new Date())
+ .leasePeriod(leaseTime)
+ .assignmentStatus(IpAssignment.AssignmentStatus.Option_Assigned)
+ .build();
+ if (freeIPPool.remove(ipAddr)) {
+ allocationMap.put(hostId, assignmentInfo);
+ return true;
+ }
+ }
+ }
}
} else if (freeIPPool.contains(ipAddr)) {
assignmentInfo = IpAssignment.builder()
@@ -194,7 +204,7 @@ public class DistributedDhcpStore implements DhcpStore {
.assignmentStatus(IpAssignment.AssignmentStatus.Option_Assigned)
.build();
if (freeIPPool.remove(ipAddr)) {
- allocationMap.put(macID, assignmentInfo);
+ allocationMap.put(hostId, assignmentInfo);
return true;
}
}
@@ -202,14 +212,16 @@ public class DistributedDhcpStore implements DhcpStore {
}
@Override
- public void releaseIP(MacAddress macID) {
- if (allocationMap.containsKey(macID)) {
- IpAssignment newAssignment = IpAssignment.builder(allocationMap.get(macID).value())
+ public void releaseIP(HostId hostId) {
+ if (allocationMap.containsKey(hostId)) {
+ IpAssignment newAssignment = IpAssignment.builder(allocationMap.get(hostId).value())
.assignmentStatus(IpAssignment.AssignmentStatus.Option_Expired)
.build();
Ip4Address freeIP = newAssignment.ipAddress();
- allocationMap.put(macID, newAssignment);
- freeIPPool.add(freeIP);
+ allocationMap.put(hostId, newAssignment);
+ if (ipWithinRange(freeIP)) {
+ freeIPPool.add(freeIP);
+ }
}
}
@@ -219,37 +231,45 @@ public class DistributedDhcpStore implements DhcpStore {
}
@Override
- public void setTimerDelay(int timeInSeconds) {
- timerDelay = timeInSeconds;
- }
+ public Map<HostId, IpAssignment> listAssignedMapping() {
- @Override
- public Map<MacAddress, IpAssignment> listMapping() {
-
- Map<MacAddress, IpAssignment> allMapping = new HashMap<>();
- for (Map.Entry<MacAddress, Versioned<IpAssignment>> entry: allocationMap.entrySet()) {
- IpAssignment assignment = entry.getValue().value();
+ Map<HostId, IpAssignment> validMapping = new HashMap<>();
+ IpAssignment assignment;
+ for (Map.Entry<HostId, Versioned<IpAssignment>> entry: allocationMap.entrySet()) {
+ assignment = entry.getValue().value();
if (assignment.assignmentStatus() == IpAssignment.AssignmentStatus.Option_Assigned) {
- allMapping.put(entry.getKey(), assignment);
+ validMapping.put(entry.getKey(), assignment);
}
}
- return allMapping;
+ return validMapping;
+ }
+ @Override
+ public Map<HostId, IpAssignment> listAllMapping() {
+ Map<HostId, IpAssignment> validMapping = new HashMap<>();
+ for (Map.Entry<HostId, Versioned<IpAssignment>> entry: allocationMap.entrySet()) {
+ validMapping.put(entry.getKey(), entry.getValue().value());
+ }
+ return validMapping;
}
@Override
public boolean assignStaticIP(MacAddress macID, Ip4Address ipAddr) {
- return assignIP(macID, ipAddr, -1);
+ HostId host = HostId.hostId(macID);
+ return assignIP(host, ipAddr, -1);
}
@Override
public boolean removeStaticIP(MacAddress macID) {
- if (allocationMap.containsKey(macID)) {
- IpAssignment assignment = allocationMap.get(macID).value();
+ HostId host = HostId.hostId(macID);
+ if (allocationMap.containsKey(host)) {
+ IpAssignment assignment = allocationMap.get(host).value();
Ip4Address freeIP = assignment.ipAddress();
if (assignment.leasePeriod() < 0) {
- allocationMap.remove(macID);
- freeIPPool.add(freeIP);
+ allocationMap.remove(host);
+ if (ipWithinRange(freeIP)) {
+ freeIPPool.add(freeIP);
+ }
return true;
}
}
@@ -258,15 +278,16 @@ public class DistributedDhcpStore implements DhcpStore {
@Override
public Iterable<Ip4Address> getAvailableIPs() {
- return ImmutableSet.<Ip4Address>copyOf(freeIPPool);
+ return ImmutableSet.copyOf(freeIPPool);
}
@Override
public void populateIPPoolfromRange(Ip4Address startIP, Ip4Address endIP) {
// Clear all entries from previous range.
+ allocationMap.clear();
+ freeIPPool.clear();
startIPRange = startIP;
endIPRange = endIP;
- freeIPPool.clear();
int lastIP = endIP.toInt();
Ip4Address nextIP;
@@ -291,34 +312,15 @@ public class DistributedDhcpStore implements DhcpStore {
}
/**
- * Purges the IP allocation map to remove expired entries and returns the freed IPs to the free pool.
+ * Returns true if the given ip is within the range of available IPs.
+ *
+ * @param ip given ip address
+ * @return true if within range, false otherwise
*/
- private class PurgeListTask implements TimerTask {
-
- @Override
- public void run(Timeout to) {
- IpAssignment ipAssignment, newAssignment;
- Date dateNow = new Date();
- for (Map.Entry<MacAddress, Versioned<IpAssignment>> entry: allocationMap.entrySet()) {
- ipAssignment = entry.getValue().value();
- long timeLapsed = dateNow.getTime() - ipAssignment.timestamp().getTime();
- if ((ipAssignment.assignmentStatus() != IpAssignment.AssignmentStatus.Option_Expired) &&
- (ipAssignment.leasePeriod() > 0) && (timeLapsed > (ipAssignment.leasePeriod()))) {
- Ip4Address freeIP = ipAssignment.ipAddress();
-
- newAssignment = IpAssignment.builder(ipAssignment)
- .assignmentStatus(IpAssignment.AssignmentStatus.Option_Expired)
- .build();
- allocationMap.put(entry.getKey(), newAssignment);
-
- if ((freeIP.toInt() > startIPRange.toInt()) && (freeIP.toInt() < endIPRange.toInt())) {
- freeIPPool.add(freeIP);
- }
- }
- }
- timeout = Timer.getTimer().newTimeout(new PurgeListTask(), timerDelay, TimeUnit.MINUTES);
+ private boolean ipWithinRange(Ip4Address ip) {
+ if ((ip.toInt() >= startIPRange.toInt()) && (ip.toInt() <= endIPRange.toInt())) {
+ return true;
}
-
+ return false;
}
-
}
diff --git a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/package-info.java b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/package-info.java
new file mode 100644
index 00000000..12e14e48
--- /dev/null
+++ b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Implementation classes for sample application that assigns and manages DHCP leases.
+ */
+package org.onosproject.dhcp.impl; \ No newline at end of file
diff --git a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/package-info.java b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/package-info.java
new file mode 100644
index 00000000..56778a35
--- /dev/null
+++ b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Sample application that assigns and manages DHCP leases.
+ */
+package org.onosproject.dhcp; \ No newline at end of file
diff --git a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/rest/DHCPWebResource.java b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/rest/DHCPWebResource.java
index bfa2767d..646ab7ea 100644
--- a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/rest/DHCPWebResource.java
+++ b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/rest/DHCPWebResource.java
@@ -22,6 +22,7 @@ import org.onlab.packet.Ip4Address;
import org.onlab.packet.MacAddress;
import org.onosproject.dhcp.DhcpService;
import org.onosproject.dhcp.IpAssignment;
+import org.onosproject.net.HostId;
import org.onosproject.rest.AbstractWebResource;
import javax.ws.rs.Consumes;
@@ -72,10 +73,10 @@ public class DHCPWebResource extends AbstractWebResource {
public Response listMappings() {
ObjectNode root = mapper().createObjectNode();
- final Map<MacAddress, IpAssignment> intents = service.listMapping();
+ final Map<HostId, IpAssignment> intents = service.listMapping();
ArrayNode arrayNode = root.putArray("mappings");
intents.entrySet().forEach(i -> arrayNode.add(mapper().createObjectNode()
- .put("mac", i.getKey().toString())
+ .put("host", i.getKey().toString())
.put("ip", i.getValue().ipAddress().toString())));
return ok(root.toString()).build();
@@ -125,10 +126,10 @@ public class DHCPWebResource extends AbstractWebResource {
}
}
- final Map<MacAddress, IpAssignment> intents = service.listMapping();
+ final Map<HostId, IpAssignment> intents = service.listMapping();
ArrayNode arrayNode = root.putArray("mappings");
intents.entrySet().forEach(i -> arrayNode.add(mapper().createObjectNode()
- .put("mac", i.getKey().toString())
+ .put("host", i.getKey().toString())
.put("ip", i.getValue().ipAddress().toString())));
} catch (IOException e) {
throw new IllegalArgumentException(e.getMessage());
@@ -152,10 +153,10 @@ public class DHCPWebResource extends AbstractWebResource {
if (!service.removeStaticMapping(MacAddress.valueOf(macID))) {
throw new IllegalArgumentException("Static Mapping Removal Failed.");
}
- final Map<MacAddress, IpAssignment> intents = service.listMapping();
+ final Map<HostId, IpAssignment> intents = service.listMapping();
ArrayNode arrayNode = root.putArray("mappings");
intents.entrySet().forEach(i -> arrayNode.add(mapper().createObjectNode()
- .put("mac", i.getKey().toString())
+ .put("host", i.getKey().toString())
.put("ip", i.getValue().ipAddress().toString())));
return ok(root.toString()).build();
diff --git a/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/rest/package-info.java b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/rest/package-info.java
new file mode 100644
index 00000000..73173c55
--- /dev/null
+++ b/framework/src/onos/apps/dhcp/src/main/java/org/onosproject/dhcp/rest/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * REST APIs for sample application that assigns and manages DHCP leases.
+ */
+package org.onosproject.dhcp.rest; \ No newline at end of file
diff --git a/framework/src/onos/apps/dhcp/src/main/resources/app/view/dhcp/dhcp.html b/framework/src/onos/apps/dhcp/src/main/resources/app/view/dhcp/dhcp.html
index 3e14570a..5782badf 100644
--- a/framework/src/onos/apps/dhcp/src/main/resources/app/view/dhcp/dhcp.html
+++ b/framework/src/onos/apps/dhcp/src/main/resources/app/view/dhcp/dhcp.html
@@ -17,7 +17,7 @@
<div class="table-header" onos-sortable-header>
<table>
<tr>
- <td colId="mac" sortable>MAC Address</td>
+ <td colId="host" sortable>Host ID</td>
<td colId="ip" sortable>IP Address</td>
<td colId="lease" sortable>Lease Expiry</td>
</tr>
@@ -25,7 +25,7 @@
</div>
<div class="table-body">
- <table onos-flash-changes id-prop="mac">
+ <table onos-flash-changes id-prop="host">
<tr ng-if="!tableData.length" class="no-data">
<td colspan="2">
No mappings found
@@ -34,8 +34,8 @@
<tr ng-repeat="dhcp in tableData track by $index"
ng-click="selectCallback($event, dhcp)"
- ng-repeat-complete row-id="{{dhcp.mac}}">
- <td>{{dhcp.mac}}</td>
+ ng-repeat-complete row-id="{{dhcp.host}}">
+ <td>{{dhcp.host}}</td>
<td>{{dhcp.ip}}</td>
<td>{{dhcp.lease}}</td>
</tr>
diff --git a/framework/src/onos/apps/dhcp/src/test/java/org/onosproject/dhcp/IpAssignmentTest.java b/framework/src/onos/apps/dhcp/src/test/java/org/onosproject/dhcp/IpAssignmentTest.java
index dad5ef55..3ecc5cfa 100644
--- a/framework/src/onos/apps/dhcp/src/test/java/org/onosproject/dhcp/IpAssignmentTest.java
+++ b/framework/src/onos/apps/dhcp/src/test/java/org/onosproject/dhcp/IpAssignmentTest.java
@@ -16,7 +16,6 @@
package org.onosproject.dhcp;
import com.google.common.testing.EqualsTester;
-import junit.framework.TestCase;
import org.junit.Assert;
import org.junit.Test;
import org.onlab.packet.Ip4Address;
@@ -31,7 +30,7 @@ import static org.junit.Assert.fail;
/**
* Unit Tests for IPAssignment class.
*/
-public class IpAssignmentTest extends TestCase {
+public class IpAssignmentTest {
private final Date dateNow = new Date();
@@ -98,4 +97,4 @@ public class IpAssignmentTest extends TestCase {
Assert.assertThat(e.getMessage(), containsString("must be specified"));
}
}
-} \ No newline at end of file
+}
diff --git a/framework/src/onos/apps/dhcp/src/test/java/org/onosproject/dhcp/impl/DhcpManagerTest.java b/framework/src/onos/apps/dhcp/src/test/java/org/onosproject/dhcp/impl/DhcpManagerTest.java
index 42ac73d3..3ea3b1b8 100644
--- a/framework/src/onos/apps/dhcp/src/test/java/org/onosproject/dhcp/impl/DhcpManagerTest.java
+++ b/framework/src/onos/apps/dhcp/src/test/java/org/onosproject/dhcp/impl/DhcpManagerTest.java
@@ -72,7 +72,7 @@ public class DhcpManagerTest {
protected HostProviderService hostProviderService;
- private static final MacAddress CLIENT1_MAC = MacAddress.valueOf("1a:1a:1a:1a:1a:1a");
+ private static final HostId CLIENT1_HOST = HostId.hostId(MacAddress.valueOf("1a:1a:1a:1a:1a:1a"));
private static final String EXPECTED_IP = "10.2.0.2";
@@ -141,7 +141,7 @@ public class DhcpManagerTest {
// Ethernet Frame.
Ethernet ethReply = new Ethernet();
- ethReply.setSourceMACAddress(CLIENT1_MAC);
+ ethReply.setSourceMACAddress(CLIENT1_HOST.mac());
ethReply.setDestinationMACAddress(MacAddress.BROADCAST);
ethReply.setEtherType(Ethernet.TYPE_IPV4);
ethReply.setVlanID((short) 2);
@@ -165,7 +165,7 @@ public class DhcpManagerTest {
dhcpReply.setServerIPAddress(0);
dhcpReply.setTransactionId(TRANSACTION_ID);
- dhcpReply.setClientHardwareAddress(CLIENT1_MAC.toBytes());
+ dhcpReply.setClientHardwareAddress(CLIENT1_HOST.mac().toBytes());
dhcpReply.setHardwareType(DHCP.HWTYPE_ETHERNET);
dhcpReply.setHardwareAddressLength((byte) 6);
@@ -209,7 +209,7 @@ public class DhcpManagerTest {
*/
private void validatePacket(Ethernet packet) {
DHCP dhcpPacket = (DHCP) packet.getPayload().getPayload().getPayload();
- assertEquals(MacAddress.valueOf(dhcpPacket.getClientHardwareAddress()), CLIENT1_MAC);
+ assertEquals(MacAddress.valueOf(dhcpPacket.getClientHardwareAddress()), CLIENT1_HOST.mac());
assertEquals(Ip4Address.valueOf(dhcpPacket.getYourIPAddress()), Ip4Address.valueOf(EXPECTED_IP));
assertEquals(dhcpPacket.getTransactionId(), TRANSACTION_ID);
}
@@ -223,32 +223,33 @@ public class DhcpManagerTest {
public void populateIPPoolfromRange(Ip4Address startIP, Ip4Address endIP) {
}
- public Ip4Address suggestIP(MacAddress macID, Ip4Address requestedIP) {
+ public Ip4Address suggestIP(HostId hostId, Ip4Address requestedIP) {
return Ip4Address.valueOf(EXPECTED_IP);
}
- public boolean assignIP(MacAddress macID, Ip4Address ipAddr, int leaseTime) {
+ public boolean assignIP(HostId hostId, Ip4Address ipAddr, int leaseTime) {
return true;
}
public void setDefaultTimeoutForPurge(int timeInSeconds) {
}
- public void setTimerDelay(int timeInSeconds) {
+ public void releaseIP(HostId hostId) {
}
- public void releaseIP(MacAddress macID) {
+ public Map<HostId, IpAssignment> listAssignedMapping() {
+ return listAllMapping();
}
- public Map<MacAddress, IpAssignment> listMapping() {
- Map<MacAddress, IpAssignment> map = new HashMap<>();
+ public Map<HostId, IpAssignment> listAllMapping() {
+ Map<HostId, IpAssignment> map = new HashMap<>();
IpAssignment assignment = IpAssignment.builder()
.ipAddress(Ip4Address.valueOf(EXPECTED_IP))
.assignmentStatus(IpAssignment.AssignmentStatus.Option_Assigned)
.leasePeriod(300)
.timestamp(new Date())
.build();
- map.put(CLIENT1_MAC, assignment);
+ map.put(CLIENT1_HOST, assignment);
return map;
}
@@ -329,7 +330,7 @@ public class DhcpManagerTest {
}
@Override
- public void hostDetected(HostId hostId, HostDescription hostDescription) {
+ public void hostDetected(HostId hostId, HostDescription hostDescription, boolean replaceIps) {
}
@Override
diff --git a/framework/src/onos/apps/dhcp/src/test/resources/dhcp-cfg.json b/framework/src/onos/apps/dhcp/src/test/resources/dhcp-cfg.json
index 8ce5486f..abc48a83 100644
--- a/framework/src/onos/apps/dhcp/src/test/resources/dhcp-cfg.json
+++ b/framework/src/onos/apps/dhcp/src/test/resources/dhcp-cfg.json
@@ -11,9 +11,7 @@
"ttl": "63",
"lease": "300",
"renew": "150",
- "rebind": "200"
- },
- "dhcpstore" : {
+ "rebind": "200",
"delay": "3",
"timeout": "150",
"startip": "10.0.0.110",
diff --git a/framework/src/onos/apps/flowanalyzer/pom.xml b/framework/src/onos/apps/flowanalyzer/pom.xml
index e068be6c..f5dfcf2b 100644
--- a/framework/src/onos/apps/flowanalyzer/pom.xml
+++ b/framework/src/onos/apps/flowanalyzer/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/fwd/pom.xml b/framework/src/onos/apps/fwd/pom.xml
index 324f46cd..977a75a4 100644
--- a/framework/src/onos/apps/fwd/pom.xml
+++ b/framework/src/onos/apps/fwd/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/metrics/pom.xml b/framework/src/onos/apps/metrics/pom.xml
index 89757c9a..8a39990a 100644
--- a/framework/src/onos/apps/metrics/pom.xml
+++ b/framework/src/onos/apps/metrics/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/metrics/src/main/java/org/onosproject/metrics/intent/IntentMetrics.java b/framework/src/onos/apps/metrics/src/main/java/org/onosproject/metrics/intent/IntentMetrics.java
index 78a540c9..9a42e9ee 100644
--- a/framework/src/onos/apps/metrics/src/main/java/org/onosproject/metrics/intent/IntentMetrics.java
+++ b/framework/src/onos/apps/metrics/src/main/java/org/onosproject/metrics/intent/IntentMetrics.java
@@ -107,7 +107,7 @@ public class IntentMetrics implements IntentMetricsService,
@Override
public List<IntentEvent> getEvents() {
synchronized (lastEvents) {
- return ImmutableList.<IntentEvent>copyOf(lastEvents);
+ return ImmutableList.copyOf(lastEvents);
}
}
diff --git a/framework/src/onos/apps/metrics/src/main/java/org/onosproject/metrics/topology/TopologyMetrics.java b/framework/src/onos/apps/metrics/src/main/java/org/onosproject/metrics/topology/TopologyMetrics.java
index 5785f5f2..fb984c9e 100644
--- a/framework/src/onos/apps/metrics/src/main/java/org/onosproject/metrics/topology/TopologyMetrics.java
+++ b/framework/src/onos/apps/metrics/src/main/java/org/onosproject/metrics/topology/TopologyMetrics.java
@@ -138,7 +138,7 @@ public class TopologyMetrics implements TopologyMetricsService {
@Override
public List<Event> getEvents() {
synchronized (lastEvents) {
- return ImmutableList.<Event>copyOf(lastEvents);
+ return ImmutableList.copyOf(lastEvents);
}
}
diff --git a/framework/src/onos/apps/mobility/pom.xml b/framework/src/onos/apps/mobility/pom.xml
index bc50813f..59fd6668 100644
--- a/framework/src/onos/apps/mobility/pom.xml
+++ b/framework/src/onos/apps/mobility/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/olt/pom.xml b/framework/src/onos/apps/olt/pom.xml
index a2a7b968..180e026a 100644
--- a/framework/src/onos/apps/olt/pom.xml
+++ b/framework/src/onos/apps/olt/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/optical/pom.xml b/framework/src/onos/apps/optical/pom.xml
index ac298e0b..9ae6f85e 100644
--- a/framework/src/onos/apps/optical/pom.xml
+++ b/framework/src/onos/apps/optical/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/optical/src/main/java/org/onosproject/optical/cfg/OpticalNetworkConfig.java b/framework/src/onos/apps/optical/src/main/java/org/onosproject/optical/cfg/OpticalNetworkConfig.java
index f3f8d174..2ef5cd57 100644
--- a/framework/src/onos/apps/optical/src/main/java/org/onosproject/optical/cfg/OpticalNetworkConfig.java
+++ b/framework/src/onos/apps/optical/src/main/java/org/onosproject/optical/cfg/OpticalNetworkConfig.java
@@ -34,8 +34,8 @@ public class OpticalNetworkConfig {
private List<OpticalLinkDescription> opticalLinks;
public OpticalNetworkConfig() {
- opticalSwitches = new ArrayList<OpticalSwitchDescription>();
- opticalLinks = new ArrayList<OpticalLinkDescription>();
+ opticalSwitches = new ArrayList<>();
+ opticalLinks = new ArrayList<>();
}
public List<OpticalSwitchDescription> getOpticalSwitches() {
diff --git a/framework/src/onos/apps/pcep-api/pom.xml b/framework/src/onos/apps/pcep-api/pom.xml
index 80b4a436..5e871678 100644
--- a/framework/src/onos/apps/pcep-api/pom.xml
+++ b/framework/src/onos/apps/pcep-api/pom.xml
@@ -1,12 +1,29 @@
-<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>
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
- </parent>
- <artifactId>onos-app-pcep-api</artifactId>
- <packaging>bundle</packaging>
+<!--
+ ~ Copyright 2015 Open Networking Laboratory
+ ~
+ ~ 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.
+ -->
+<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>
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-apps</artifactId>
+ <version>1.4.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>onos-app-pcep-api</artifactId>
+ <packaging>bundle</packaging>
- <description>PCEP protocol API</description>
+ <description>PCEP protocol API</description>
</project> \ No newline at end of file
diff --git a/framework/src/onos/apps/pom.xml b/framework/src/onos/apps/pom.xml
index e5ceddde..334c690b 100644
--- a/framework/src/onos/apps/pom.xml
+++ b/framework/src/onos/apps/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@@ -37,7 +37,6 @@
<module>fwd</module>
<module>mobility</module>
<module>proxyarp</module>
- <module>config</module>
<module>sdnip</module>
<module>optical</module>
<module>metrics</module>
@@ -58,7 +57,8 @@
<module>vtn</module>
<module>vtnweb</module>
<module>dhcp</module>
- </modules>
+ <module>cordvtn</module>
+ </modules>
<properties>
<web.context>default</web.context>
diff --git a/framework/src/onos/apps/proxyarp/pom.xml b/framework/src/onos/apps/proxyarp/pom.xml
index e6e76585..69f64ddb 100644
--- a/framework/src/onos/apps/proxyarp/pom.xml
+++ b/framework/src/onos/apps/proxyarp/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/proxyarp/src/main/java/org/onosproject/proxyarp/ProxyArp.java b/framework/src/onos/apps/proxyarp/src/main/java/org/onosproject/proxyarp/ProxyArp.java
index 742d7af7..2eb96df2 100644
--- a/framework/src/onos/apps/proxyarp/src/main/java/org/onosproject/proxyarp/ProxyArp.java
+++ b/framework/src/onos/apps/proxyarp/src/main/java/org/onosproject/proxyarp/ProxyArp.java
@@ -82,7 +82,7 @@ public class ProxyArp {
packetService.addProcessor(processor, PacketProcessor.director(1));
readComponentConfiguration(context);
- requestPackests();
+ requestPackets();
log.info("Started with Application ID {}", appId.id());
}
@@ -99,13 +99,13 @@ public class ProxyArp {
@Modified
public void modified(ComponentContext context) {
readComponentConfiguration(context);
- requestPackests();
+ requestPackets();
}
/**
* Request packet in via PacketService.
*/
- private void requestPackests() {
+ private void requestPackets() {
TrafficSelector.Builder selectorBuilder =
DefaultTrafficSelector.builder();
selectorBuilder.matchEthType(TYPE_ARP);
diff --git a/framework/src/onos/apps/reactive-routing/pom.xml b/framework/src/onos/apps/reactive-routing/pom.xml
index 1d93cbf1..58fb91ee 100644
--- a/framework/src/onos/apps/reactive-routing/pom.xml
+++ b/framework/src/onos/apps/reactive-routing/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/routing-api/pom.xml b/framework/src/onos/apps/routing-api/pom.xml
index 1b9fc2fa..48fc2920 100644
--- a/framework/src/onos/apps/routing-api/pom.xml
+++ b/framework/src/onos/apps/routing-api/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>onos-apps</artifactId>
<groupId>org.onosproject</groupId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/framework/src/onos/apps/routing-api/src/main/java/org/onosproject/routing/config/Interface.java b/framework/src/onos/apps/routing-api/src/main/java/org/onosproject/routing/config/Interface.java
index d6f6e574..8d563b87 100644
--- a/framework/src/onos/apps/routing-api/src/main/java/org/onosproject/routing/config/Interface.java
+++ b/framework/src/onos/apps/routing-api/src/main/java/org/onosproject/routing/config/Interface.java
@@ -21,7 +21,6 @@ import org.onlab.packet.MacAddress;
import org.onlab.packet.VlanId;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.host.InterfaceIpAddress;
-import org.onosproject.net.host.PortAddresses;
import java.util.Objects;
import java.util.Set;
@@ -55,18 +54,6 @@ public class Interface {
}
/**
- * Creates an Interface based on a PortAddresses object.
- *
- * @param portAddresses the PortAddresses object to turn into an Interface
- */
- public Interface(PortAddresses portAddresses) {
- connectPoint = portAddresses.connectPoint();
- ipAddresses = Sets.newHashSet(portAddresses.ipAddresses());
- macAddress = portAddresses.mac();
- vlan = portAddresses.vlan();
- }
-
- /**
* Retrieves the connection point that this interface maps to.
*
* @return the connection point
diff --git a/framework/src/onos/apps/routing/pom.xml b/framework/src/onos/apps/routing/pom.xml
index 1d9f19b7..c461ef3f 100644
--- a/framework/src/onos/apps/routing/pom.xml
+++ b/framework/src/onos/apps/routing/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>onos-apps</artifactId>
<groupId>org.onosproject</groupId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/framework/src/onos/apps/routing/src/main/java/org/onosproject/routing/bgp/BgpSessionManager.java b/framework/src/onos/apps/routing/src/main/java/org/onosproject/routing/bgp/BgpSessionManager.java
index 57481c20..ab8a0493 100644
--- a/framework/src/onos/apps/routing/src/main/java/org/onosproject/routing/bgp/BgpSessionManager.java
+++ b/framework/src/onos/apps/routing/src/main/java/org/onosproject/routing/bgp/BgpSessionManager.java
@@ -300,21 +300,18 @@ public class BgpSessionManager implements BgpInfoService, BgpService {
ChannelFactory channelFactory = new NioServerSocketChannelFactory(
newCachedThreadPool(groupedThreads("onos/bgp", "sm-boss-%d")),
newCachedThreadPool(groupedThreads("onos/bgp", "sm-worker-%d")));
- ChannelPipelineFactory pipelineFactory = new ChannelPipelineFactory() {
- @Override
- public ChannelPipeline getPipeline() throws Exception {
- // Allocate a new session per connection
- BgpSession bgpSessionHandler =
- new BgpSession(BgpSessionManager.this);
- BgpFrameDecoder bgpFrameDecoder =
- new BgpFrameDecoder(bgpSessionHandler);
-
- // Setup the processing pipeline
- ChannelPipeline pipeline = Channels.pipeline();
- pipeline.addLast("BgpFrameDecoder", bgpFrameDecoder);
- pipeline.addLast("BgpSession", bgpSessionHandler);
- return pipeline;
- }
+ ChannelPipelineFactory pipelineFactory = () -> {
+ // Allocate a new session per connection
+ BgpSession bgpSessionHandler =
+ new BgpSession(BgpSessionManager.this);
+ BgpFrameDecoder bgpFrameDecoder =
+ new BgpFrameDecoder(bgpSessionHandler);
+
+ // Setup the processing pipeline
+ ChannelPipeline pipeline = Channels.pipeline();
+ pipeline.addLast("BgpFrameDecoder", bgpFrameDecoder);
+ pipeline.addLast("BgpSession", bgpSessionHandler);
+ return pipeline;
};
InetSocketAddress listenAddress =
new InetSocketAddress(bgpPort);
diff --git a/framework/src/onos/apps/routing/src/main/java/org/onosproject/routing/config/impl/RoutingConfigurationImpl.java b/framework/src/onos/apps/routing/src/main/java/org/onosproject/routing/config/impl/RoutingConfigurationImpl.java
index 1078319d..0a6f9d4c 100644
--- a/framework/src/onos/apps/routing/src/main/java/org/onosproject/routing/config/impl/RoutingConfigurationImpl.java
+++ b/framework/src/onos/apps/routing/src/main/java/org/onosproject/routing/config/impl/RoutingConfigurationImpl.java
@@ -38,7 +38,6 @@ import org.onosproject.net.config.ConfigFactory;
import org.onosproject.net.config.NetworkConfigRegistry;
import org.onosproject.net.config.NetworkConfigService;
import org.onosproject.net.config.basics.SubjectFactories;
-import org.onosproject.net.host.HostService;
import org.onosproject.routing.config.BgpConfig;
import org.onosproject.routing.config.BgpPeer;
import org.onosproject.routing.config.BgpSpeaker;
@@ -76,9 +75,6 @@ public class RoutingConfigurationImpl implements RoutingConfigurationService {
private String configFileName = DEFAULT_CONFIG_FILE;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected HostService hostService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected NetworkConfigRegistry registry;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -103,7 +99,6 @@ public class RoutingConfigurationImpl implements RoutingConfigurationService {
new DefaultByteArrayNodeFactory());
private MacAddress virtualGatewayMacAddress;
- private HostToInterfaceAdaptor hostAdaptor;
private ConfigFactory configFactory =
new ConfigFactory(SubjectFactories.APP_SUBJECT_FACTORY, BgpConfig.class, "bgp") {
@@ -117,7 +112,6 @@ public class RoutingConfigurationImpl implements RoutingConfigurationService {
public void activate() {
registry.registerConfigFactory(configFactory);
readConfiguration();
- hostAdaptor = new HostToInterfaceAdaptor(hostService);
log.info("Routing configuration service started");
}
@@ -189,7 +183,7 @@ public class RoutingConfigurationImpl implements RoutingConfigurationService {
@Override
public Set<Interface> getInterfaces() {
- return hostAdaptor.getInterfaces();
+ return Collections.emptySet();
}
@Override
@@ -212,17 +206,17 @@ public class RoutingConfigurationImpl implements RoutingConfigurationService {
@Override
public Interface getInterface(ConnectPoint connectPoint) {
- return hostAdaptor.getInterface(connectPoint);
+ return null;
}
@Override
public Interface getInterface(IpAddress ip) {
- return hostAdaptor.getInterface(ip);
+ return null;
}
@Override
public Interface getMatchingInterface(IpAddress ipAddress) {
- return hostAdaptor.getMatchingInterface(ipAddress);
+ return null;
}
@Override
diff --git a/framework/src/onos/apps/routing/src/main/java/org/onosproject/routing/impl/Router.java b/framework/src/onos/apps/routing/src/main/java/org/onosproject/routing/impl/Router.java
index c4f291ba..6700d530 100644
--- a/framework/src/onos/apps/routing/src/main/java/org/onosproject/routing/impl/Router.java
+++ b/framework/src/onos/apps/routing/src/main/java/org/onosproject/routing/impl/Router.java
@@ -159,12 +159,7 @@ public class Router implements RoutingService {
bgpService.start(new InternalRouteListener());
- bgpUpdatesExecutor.execute(new Runnable() {
- @Override
- public void run() {
- doUpdatesThread();
- }
- });
+ bgpUpdatesExecutor.execute(this::doUpdatesThread);
}
@Override
diff --git a/framework/src/onos/apps/routing/src/test/java/org/onosproject/routing/bgp/BgpSessionManagerTest.java b/framework/src/onos/apps/routing/src/test/java/org/onosproject/routing/bgp/BgpSessionManagerTest.java
index 634e87b9..3f5a6b8b 100644
--- a/framework/src/onos/apps/routing/src/test/java/org/onosproject/routing/bgp/BgpSessionManagerTest.java
+++ b/framework/src/onos/apps/routing/src/test/java/org/onosproject/routing/bgp/BgpSessionManagerTest.java
@@ -151,19 +151,15 @@ public class BgpSessionManagerTest {
new NioClientSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool());
- ChannelPipelineFactory pipelineFactory =
- new ChannelPipelineFactory() {
- @Override
- public ChannelPipeline getPipeline() throws Exception {
- // Setup the transmitting pipeline
- ChannelPipeline pipeline = Channels.pipeline();
- pipeline.addLast("TestBgpPeerFrameDecoder",
- peerFrameDecoder);
- pipeline.addLast("TestBgpPeerChannelHandler",
- peerChannelHandler);
- return pipeline;
- }
- };
+ ChannelPipelineFactory pipelineFactory = () -> {
+ // Setup the transmitting pipeline
+ ChannelPipeline pipeline = Channels.pipeline();
+ pipeline.addLast("TestBgpPeerFrameDecoder",
+ peerFrameDecoder);
+ pipeline.addLast("TestBgpPeerChannelHandler",
+ peerChannelHandler);
+ return pipeline;
+ };
peerBootstrap = new ClientBootstrap(channelFactory);
peerBootstrap.setOption("child.keepAlive", true);
diff --git a/framework/src/onos/apps/sdnip/pom.xml b/framework/src/onos/apps/sdnip/pom.xml
index 68b500d5..99314aa8 100644
--- a/framework/src/onos/apps/sdnip/pom.xml
+++ b/framework/src/onos/apps/sdnip/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@@ -69,12 +69,6 @@
</dependency>
<dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-app-config</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
<groupId>org.apache.karaf.shell</groupId>
<artifactId>org.apache.karaf.shell.console</artifactId>
</dependency>
diff --git a/framework/src/onos/apps/sdnip/src/main/java/org/onosproject/sdnip/IntentSynchronizer.java b/framework/src/onos/apps/sdnip/src/main/java/org/onosproject/sdnip/IntentSynchronizer.java
index 35ff7054..d8d8f45d 100644
--- a/framework/src/onos/apps/sdnip/src/main/java/org/onosproject/sdnip/IntentSynchronizer.java
+++ b/framework/src/onos/apps/sdnip/src/main/java/org/onosproject/sdnip/IntentSynchronizer.java
@@ -887,7 +887,7 @@ public class IntentSynchronizer implements FibListener, IntentRequestListener {
checkNotNull(dstMacAddress);
checkNotNull(srcConnectPoint);
- Set<ConnectPoint> ingressPoints = new HashSet<ConnectPoint>();
+ Set<ConnectPoint> ingressPoints = new HashSet<>();
ingressPoints.add(srcConnectPoint);
IpPrefix dstIpPrefix = dstIpAddress.toIpPrefix();
diff --git a/framework/src/onos/apps/segmentrouting/pom.xml b/framework/src/onos/apps/segmentrouting/pom.xml
index 3ed4c4fe..83ae76db 100644
--- a/framework/src/onos/apps/segmentrouting/pom.xml
+++ b/framework/src/onos/apps/segmentrouting/pom.xml
@@ -21,7 +21,7 @@
<parent>
<artifactId>onos-apps</artifactId>
<groupId>org.onosproject</groupId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/DeviceConfiguration.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/DeviceConfiguration.java
index d82eb5ec..ef9d444a 100644
--- a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/DeviceConfiguration.java
+++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/DeviceConfiguration.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.segmentrouting;
import com.google.common.collect.Lists;
@@ -33,7 +48,7 @@ public class DeviceConfiguration implements DeviceProperties {
private static final Logger log = LoggerFactory
.getLogger(DeviceConfiguration.class);
- private final List<Integer> allSegmentIds = new ArrayList<Integer>();
+ private final List<Integer> allSegmentIds = new ArrayList<>();
private final HashMap<DeviceId, SegmentRouterInfo> deviceConfigMap = new HashMap<>();
private final NetworkConfigManager configService;
@@ -73,7 +88,7 @@ public class DeviceConfiguration implements DeviceProperties {
info.ip = prefix.address();
info.isEdge = ((SegmentRouterConfig) cfg).isEdgeRouter();
info.subnets = new HashMap<>();
- info.gatewayIps = new HashMap<PortNumber, Ip4Address>();
+ info.gatewayIps = new HashMap<>();
for (Subnet s: ((SegmentRouterConfig) cfg).getSubnets()) {
info.subnets.put(PortNumber.portNumber(s.getPortNo()),
Ip4Prefix.valueOf(s.getSubnetIp()));
@@ -264,8 +279,7 @@ public class DeviceConfiguration implements DeviceProperties {
log.debug("getSubnetGatewayIps for device{} is {}",
deviceId,
deviceConfigMap.get(deviceId).gatewayIps.values());
- return new ArrayList<Ip4Address>(deviceConfigMap.
- get(deviceId).gatewayIps.values());
+ return new ArrayList<>(deviceConfigMap.get(deviceId).gatewayIps.values());
} else {
return null;
}
@@ -282,8 +296,7 @@ public class DeviceConfiguration implements DeviceProperties {
log.debug("getSubnets for device{} is {}",
deviceId,
deviceConfigMap.get(deviceId).subnets.values());
- return new ArrayList<Ip4Prefix>(deviceConfigMap.
- get(deviceId).subnets.values());
+ return new ArrayList<>(deviceConfigMap.get(deviceId).subnets.values());
} else {
return null;
}
diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/ECMPShortestPathGraph.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/ECMPShortestPathGraph.java
index cd28fcf9..2e2041c4 100644
--- a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/ECMPShortestPathGraph.java
+++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/ECMPShortestPathGraph.java
@@ -97,7 +97,7 @@ public class ECMPShortestPathGraph {
}
Integer distance = deviceSearched.get(reachedDevice);
- if ((distance != null) && (distance.intValue() < (currDistance + 1))) {
+ if ((distance != null) && (distance < (currDistance + 1))) {
continue;
}
if (distance == null) {
@@ -109,7 +109,7 @@ public class ECMPShortestPathGraph {
ArrayList<DeviceId> distanceSwArray = distanceDeviceMap
.get(currDistance + 1);
if (distanceSwArray == null) {
- distanceSwArray = new ArrayList<DeviceId>();
+ distanceSwArray = new ArrayList<>();
distanceSwArray.add(reachedDevice);
distanceDeviceMap.put(currDistance + 1, distanceSwArray);
} else {
@@ -120,7 +120,7 @@ public class ECMPShortestPathGraph {
ArrayList<Link> upstreamLinkArray =
upstreamLinks.get(reachedDevice);
if (upstreamLinkArray == null) {
- upstreamLinkArray = new ArrayList<Link>();
+ upstreamLinkArray = new ArrayList<>();
upstreamLinkArray.add(copyDefaultLink(link));
//upstreamLinkArray.add(link);
upstreamLinks.put(reachedDevice, upstreamLinkArray);
@@ -171,7 +171,7 @@ public class ECMPShortestPathGraph {
}
Integer distance = deviceSearched.get(reachedDevice);
- if ((distance != null) && (distance.intValue() < (currDistance + 1))) {
+ if ((distance != null) && (distance < (currDistance + 1))) {
continue;
}
if (distance == null) {
@@ -183,7 +183,7 @@ public class ECMPShortestPathGraph {
ArrayList<DeviceId> distanceSwArray = distanceDeviceMap
.get(currDistance + 1);
if (distanceSwArray == null) {
- distanceSwArray = new ArrayList<DeviceId>();
+ distanceSwArray = new ArrayList<>();
distanceSwArray.add(reachedDevice);
distanceDeviceMap.put(currDistance + 1, distanceSwArray);
} else {
@@ -194,7 +194,7 @@ public class ECMPShortestPathGraph {
ArrayList<Link> upstreamLinkArray =
upstreamLinks.get(reachedDevice);
if (upstreamLinkArray == null) {
- upstreamLinkArray = new ArrayList<Link>();
+ upstreamLinkArray = new ArrayList<>();
upstreamLinkArray.add(copyDefaultLink(link));
upstreamLinks.put(reachedDevice, upstreamLinkArray);
} else {
@@ -234,7 +234,7 @@ public class ECMPShortestPathGraph {
for (Link upstreamLink : upstreamLinks.get(dstDeviceDeviceId)) {
/* Deep clone the path object */
Path sofarPath;
- ArrayList<Link> sofarLinks = new ArrayList<Link>();
+ ArrayList<Link> sofarLinks = new ArrayList<>();
if (path != null && !path.links().isEmpty()) {
sofarLinks.addAll(path.links());
}
@@ -288,12 +288,10 @@ public class ECMPShortestPathGraph {
public HashMap<Integer, HashMap<DeviceId,
ArrayList<Path>>> getCompleteLearnedDeviceesAndPaths() {
- HashMap<Integer, HashMap<DeviceId, ArrayList<Path>>> pathGraph = new
- HashMap<Integer, HashMap<DeviceId, ArrayList<Path>>>();
+ HashMap<Integer, HashMap<DeviceId, ArrayList<Path>>> pathGraph = new HashMap<>();
for (Integer itrIndx : distanceDeviceMap.keySet()) {
- HashMap<DeviceId, ArrayList<Path>> swMap = new
- HashMap<DeviceId, ArrayList<Path>>();
+ HashMap<DeviceId, ArrayList<Path>> swMap = new HashMap<>();
for (DeviceId sw : distanceDeviceMap.get(itrIndx)) {
swMap.put(sw, getECMPPaths(sw));
}
@@ -314,12 +312,10 @@ public class ECMPShortestPathGraph {
public HashMap<Integer, HashMap<DeviceId,
ArrayList<ArrayList<DeviceId>>>> getAllLearnedSwitchesAndVia() {
- HashMap<Integer, HashMap<DeviceId, ArrayList<ArrayList<DeviceId>>>> deviceViaMap =
- new HashMap<Integer, HashMap<DeviceId, ArrayList<ArrayList<DeviceId>>>>();
+ HashMap<Integer, HashMap<DeviceId, ArrayList<ArrayList<DeviceId>>>> deviceViaMap = new HashMap<>();
for (Integer itrIndx : distanceDeviceMap.keySet()) {
- HashMap<DeviceId, ArrayList<ArrayList<DeviceId>>> swMap =
- new HashMap<DeviceId, ArrayList<ArrayList<DeviceId>>>();
+ HashMap<DeviceId, ArrayList<ArrayList<DeviceId>>> swMap = new HashMap<>();
for (DeviceId sw : distanceDeviceMap.get(itrIndx)) {
ArrayList<ArrayList<DeviceId>> swViaArray = new ArrayList<>();
diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/IpHandler.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/IpHandler.java
index 81d00f50..e37fe52a 100644
--- a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/IpHandler.java
+++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/IpHandler.java
@@ -50,7 +50,7 @@ public class IpHandler {
public IpHandler(SegmentRoutingManager srManager) {
this.srManager = srManager;
this.config = checkNotNull(srManager.deviceConfiguration);
- ipPacketQueue = new ConcurrentHashMap<Ip4Address, ConcurrentLinkedQueue<IPv4>>();
+ ipPacketQueue = new ConcurrentHashMap<>();
}
/**
@@ -104,7 +104,7 @@ public class IpHandler {
Ip4Address destIpAddress = Ip4Address.valueOf(ipPacket.getDestinationAddress());
if (ipPacketQueue.get(destIpAddress) == null) {
- ConcurrentLinkedQueue<IPv4> queue = new ConcurrentLinkedQueue<IPv4>();
+ ConcurrentLinkedQueue<IPv4> queue = new ConcurrentLinkedQueue<>();
queue.add(ipPacket);
ipPacketQueue.put(destIpAddress, queue);
} else {
diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/RoutingRulePopulator.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/RoutingRulePopulator.java
index 59fc4ca7..d802be91 100644
--- a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/RoutingRulePopulator.java
+++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/RoutingRulePopulator.java
@@ -221,7 +221,7 @@ public class RoutingRulePopulator {
Set<DeviceId> nextHops) {
TrafficSelector.Builder sbuilder = DefaultTrafficSelector.builder();
- List<ForwardingObjective.Builder> fwdObjBuilders = new ArrayList<ForwardingObjective.Builder>();
+ List<ForwardingObjective.Builder> fwdObjBuilders = new ArrayList<>();
// TODO Handle the case of Bos == false
sbuilder.matchMplsLabel(MplsLabel.mplsLabel(config.getSegmentId(destSwId)));
diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfig.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfig.java
index 6ae0779e..0c7749e6 100644
--- a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfig.java
+++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfig.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.segmentrouting.config;
import java.util.ArrayList;
@@ -30,8 +45,8 @@ public class NetworkConfig {
* Default constructor.
*/
public NetworkConfig() {
- switches = new ArrayList<SwitchConfig>();
- links = new ArrayList<LinkConfig>();
+ switches = new ArrayList<>();
+ links = new ArrayList<>();
}
@JsonProperty("comment")
diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigException.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigException.java
index 91942216..0c0dac86 100644
--- a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigException.java
+++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigException.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.segmentrouting.config;
import org.onosproject.net.DeviceId;
diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigManager.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigManager.java
index 44e4f1c6..f034f372 100644
--- a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigManager.java
+++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigManager.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.segmentrouting.config;
import java.io.File;
@@ -135,7 +150,7 @@ public class NetworkConfigManager implements NetworkConfigService {
@Override
public List<SwitchConfig> getConfiguredAllowedSwitches() {
- List<SwitchConfig> allowed = new ArrayList<SwitchConfig>();
+ List<SwitchConfig> allowed = new ArrayList<>();
for (SwitchConfig swc : configuredSwitches.values()) {
if (swc.isAllowed()) {
allowed.add(swc);
@@ -146,7 +161,7 @@ public class NetworkConfigManager implements NetworkConfigService {
@Override
public List<LinkConfig> getConfiguredAllowedLinks() {
- List<LinkConfig> allowed = new ArrayList<LinkConfig>();
+ List<LinkConfig> allowed = new ArrayList<>();
for (LinkConfig lkc : configuredLinks.values()) {
if (lkc.isAllowed()) {
allowed.add(lkc);
@@ -244,8 +259,8 @@ public class NetworkConfigManager implements NetworkConfigService {
}
private void validateSwitchConfig(List<SwitchConfig> swConfList) {
- Set<DeviceId> swDpids = new HashSet<DeviceId>();
- Set<String> swNames = new HashSet<String>();
+ Set<DeviceId> swDpids = new HashSet<>();
+ Set<String> swNames = new HashSet<>();
for (SwitchConfig swc : swConfList) {
if (swc.getNodeDpid() == null || swc.getDpid() == null) {
throw new NetworkConfigException.DpidNotSpecified(swc.getName());
@@ -315,9 +330,9 @@ public class NetworkConfigManager implements NetworkConfigService {
*/
public void init() {
loadNetworkConfig();
- configuredSwitches = new ConcurrentHashMap<DeviceId, SwitchConfig>();
- configuredLinks = new ConcurrentHashMap<Link, LinkConfig>();
- nameToDpid = new HashMap<String, DeviceId>();
+ configuredSwitches = new ConcurrentHashMap<>();
+ configuredLinks = new ConcurrentHashMap<>();
+ nameToDpid = new HashMap<>();
parseNetworkConfig();
}
}
diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigService.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigService.java
index 56855271..afbb0fcc 100644
--- a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigService.java
+++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigService.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.segmentrouting.config;
import java.util.List;
diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/PktLinkConfig.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/PktLinkConfig.java
index c66ac3c7..3c51fa9d 100644
--- a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/PktLinkConfig.java
+++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/PktLinkConfig.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.segmentrouting.config;
import java.util.List;
@@ -33,7 +48,7 @@ public class PktLinkConfig extends LinkConfig {
type = lkc.getType();
allowed = lkc.isAllowed();
params = lkc.getParams();
- publishAttributes = new ConcurrentHashMap<String, String>();
+ publishAttributes = new ConcurrentHashMap<>();
parseParams();
validateParams();
setPublishAttributes();
diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/SegmentRouterConfig.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/SegmentRouterConfig.java
index 4775c77f..c8d4a54a 100644
--- a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/SegmentRouterConfig.java
+++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/SegmentRouterConfig.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.segmentrouting.config;
import java.io.IOException;
@@ -52,9 +67,9 @@ public class SegmentRouterConfig extends SwitchConfig {
this.setLongitude(swc.getLongitude());
this.setParams(swc.getParams());
this.setAllowed(swc.isAllowed());
- publishAttributes = new ConcurrentHashMap<String, String>();
- adjacencySids = new ArrayList<AdjacencySid>();
- subnets = new ArrayList<Subnet>();
+ publishAttributes = new ConcurrentHashMap<>();
+ adjacencySids = new ArrayList<>();
+ subnets = new ArrayList<>();
parseParams();
validateParams();
setPublishAttributes();
@@ -267,7 +282,7 @@ public class SegmentRouterConfig extends SwitchConfig {
} else if (fe.getKey().equals("ports")) {
if (fe.getValue().isArray()) {
Iterator<JsonNode> i = fe.getValue().elements();
- ports = new ArrayList<Integer>();
+ ports = new ArrayList<>();
while (i.hasNext()) {
ports.add(i.next().asInt());
}
diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultEdgeGroupHandler.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultEdgeGroupHandler.java
index 41cf8acc..3dc312df 100644
--- a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultEdgeGroupHandler.java
+++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultEdgeGroupHandler.java
@@ -69,7 +69,7 @@ public class DefaultEdgeGroupHandler extends DefaultGroupHandler {
Set<Set<DeviceId>> powerSet = getPowerSetOfNeighbors(neighbors);
log.trace("createGroupsAtEdgeRouter: The size of neighbor powerset "
+ "for sw {} is {}", deviceId, powerSet.size());
- Set<NeighborSet> nsSet = new HashSet<NeighborSet>();
+ Set<NeighborSet> nsSet = new HashSet<>();
for (Set<DeviceId> combo : powerSet) {
if (combo.isEmpty()) {
continue;
@@ -148,7 +148,7 @@ public class DefaultEdgeGroupHandler extends DefaultGroupHandler {
Set<DeviceId> updatedNeighbors) {
Set<Set<DeviceId>> powerSet = getPowerSetOfNeighbors(updatedNeighbors);
- Set<DeviceId> tmp = new HashSet<DeviceId>();
+ Set<DeviceId> tmp = new HashSet<>();
tmp.addAll(updatedNeighbors);
tmp.remove(impactedNeighbor);
Set<Set<DeviceId>> tmpPowerSet = getPowerSetOfNeighbors(tmp);
@@ -156,7 +156,7 @@ public class DefaultEdgeGroupHandler extends DefaultGroupHandler {
// Compute the impacted neighbor sets
powerSet.removeAll(tmpPowerSet);
- Set<NeighborSet> nsSet = new HashSet<NeighborSet>();
+ Set<NeighborSet> nsSet = new HashSet<>();
for (Set<DeviceId> combo : powerSet) {
if (combo.isEmpty()) {
continue;
diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultGroupHandler.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultGroupHandler.java
index a43a0f09..9bbde2f3 100644
--- a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultGroupHandler.java
+++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultGroupHandler.java
@@ -313,13 +313,13 @@ public class DefaultGroupHandler {
return -1;
} else {
log.debug("getNextObjectiveId in device{}: Next objective id {} "
- + "created for {}", deviceId, nextId.intValue(), ns);
+ + "created for {}", deviceId, nextId, ns);
}
} else {
log.trace("getNextObjectiveId in device{}: Next objective id {} "
- + "found for {}", deviceId, nextId.intValue(), ns);
+ + "found for {}", deviceId, nextId, ns);
}
- return nextId.intValue();
+ return nextId;
}
/**
@@ -371,7 +371,7 @@ public class DefaultGroupHandler {
if (devicePortMap.get(neighborId) != null) {
devicePortMap.get(neighborId).add(portToNeighbor);
} else {
- Set<PortNumber> ports = new HashSet<PortNumber>();
+ Set<PortNumber> ports = new HashSet<>();
ports.add(portToNeighbor);
devicePortMap.put(neighborId, ports);
}
@@ -383,8 +383,8 @@ public class DefaultGroupHandler {
}
protected Set<Set<DeviceId>> getPowerSetOfNeighbors(Set<DeviceId> neighbors) {
- List<DeviceId> list = new ArrayList<DeviceId>(neighbors);
- Set<Set<DeviceId>> sets = new HashSet<Set<DeviceId>>();
+ List<DeviceId> list = new ArrayList<>(neighbors);
+ Set<Set<DeviceId>> sets = new HashSet<>();
// get the number of elements in the neighbors
int elements = list.size();
// the number of members of a power set is 2^n
@@ -394,7 +394,7 @@ public class DefaultGroupHandler {
// run a binary counter for the number of power elements
// NOTE: Exclude empty set
for (long i = 1; i < powerElements; i++) {
- Set<DeviceId> neighborSubSet = new HashSet<DeviceId>();
+ Set<DeviceId> neighborSubSet = new HashSet<>();
for (int j = 0; j < elements; j++) {
if ((i >> j) % 2 == 1) {
neighborSubSet.add(list.get(j));
@@ -411,7 +411,7 @@ public class DefaultGroupHandler {
protected List<Integer> getSegmentIdsTobePairedWithNeighborSet(Set<DeviceId> neighbors) {
- List<Integer> nsSegmentIds = new ArrayList<Integer>();
+ List<Integer> nsSegmentIds = new ArrayList<>();
// Always pair up with no edge label
// If (neighbors.size() == 1) {
diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultTransitGroupHandler.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultTransitGroupHandler.java
index e12426c2..3cb73aba 100644
--- a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultTransitGroupHandler.java
+++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultTransitGroupHandler.java
@@ -63,7 +63,7 @@ public class DefaultTransitGroupHandler extends DefaultGroupHandler {
sets = filterEdgeRouterOnlyPairings(sets);
log.debug("createGroupsAtTransitRouter: The size of neighbor powerset "
+ "for sw {} is {}", deviceId, sets.size());
- Set<NeighborSet> nsSet = new HashSet<NeighborSet>();
+ Set<NeighborSet> nsSet = new HashSet<>();
for (Set<DeviceId> combo : sets) {
if (combo.isEmpty()) {
continue;
@@ -137,7 +137,7 @@ public class DefaultTransitGroupHandler extends DefaultGroupHandler {
Set<DeviceId> updatedNeighbors) {
Set<Set<DeviceId>> powerSet = getPowerSetOfNeighbors(updatedNeighbors);
- Set<DeviceId> tmp = new HashSet<DeviceId>();
+ Set<DeviceId> tmp = new HashSet<>();
tmp.addAll(updatedNeighbors);
tmp.remove(impactedNeighbor);
Set<Set<DeviceId>> tmpPowerSet = getPowerSetOfNeighbors(tmp);
@@ -146,7 +146,7 @@ public class DefaultTransitGroupHandler extends DefaultGroupHandler {
powerSet.removeAll(tmpPowerSet);
powerSet = filterEdgeRouterOnlyPairings(powerSet);
- Set<NeighborSet> nsSet = new HashSet<NeighborSet>();
+ Set<NeighborSet> nsSet = new HashSet<>();
for (Set<DeviceId> combo : powerSet) {
if (combo.isEmpty()) {
continue;
@@ -163,7 +163,7 @@ public class DefaultTransitGroupHandler extends DefaultGroupHandler {
}
private Set<Set<DeviceId>> filterEdgeRouterOnlyPairings(Set<Set<DeviceId>> sets) {
- Set<Set<DeviceId>> fiteredSets = new HashSet<Set<DeviceId>>();
+ Set<Set<DeviceId>> fiteredSets = new HashSet<>();
for (Set<DeviceId> deviceSubSet : sets) {
if (deviceSubSet.size() > 1) {
boolean avoidEdgeRouterPairing = true;
diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/NeighborSet.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/NeighborSet.java
index 7ada3224..44715d24 100644
--- a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/NeighborSet.java
+++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/NeighborSet.java
@@ -44,7 +44,7 @@ public class NeighborSet {
public NeighborSet(Set<DeviceId> neighbors) {
checkNotNull(neighbors);
this.edgeLabel = NO_EDGE_LABEL;
- this.neighbors = new HashSet<DeviceId>();
+ this.neighbors = new HashSet<>();
this.neighbors.addAll(neighbors);
}
@@ -57,7 +57,7 @@ public class NeighborSet {
public NeighborSet(Set<DeviceId> neighbors, int edgeLabel) {
checkNotNull(neighbors);
this.edgeLabel = edgeLabel;
- this.neighbors = new HashSet<DeviceId>();
+ this.neighbors = new HashSet<>();
this.neighbors.addAll(neighbors);
}
@@ -66,7 +66,7 @@ public class NeighborSet {
*/
public NeighborSet() {
this.edgeLabel = NO_EDGE_LABEL;
- this.neighbors = new HashSet<DeviceId>();
+ this.neighbors = new HashSet<>();
}
/**
diff --git a/framework/src/onos/apps/test/demo/pom.xml b/framework/src/onos/apps/test/demo/pom.xml
index 27dd6675..4b08430d 100644
--- a/framework/src/onos/apps/test/demo/pom.xml
+++ b/framework/src/onos/apps/test/demo/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps-test</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/test/demo/src/main/java/org/onosproject/demo/DemoAPI.java b/framework/src/onos/apps/test/demo/src/main/java/org/onosproject/demo/DemoAPI.java
index 4197bb60..00956763 100644
--- a/framework/src/onos/apps/test/demo/src/main/java/org/onosproject/demo/DemoAPI.java
+++ b/framework/src/onos/apps/test/demo/src/main/java/org/onosproject/demo/DemoAPI.java
@@ -24,7 +24,7 @@ import java.util.Optional;
*/
public interface DemoAPI {
- enum InstallType { MESH, RANDOM };
+ enum InstallType { MESH, RANDOM }
/**
* Tests flow subsystem based on the parameters supplied.
diff --git a/framework/src/onos/apps/test/demo/src/main/java/org/onosproject/demo/DemoInstaller.java b/framework/src/onos/apps/test/demo/src/main/java/org/onosproject/demo/DemoInstaller.java
index 27d1ca96..a408e695 100644
--- a/framework/src/onos/apps/test/demo/src/main/java/org/onosproject/demo/DemoInstaller.java
+++ b/framework/src/onos/apps/test/demo/src/main/java/org/onosproject/demo/DemoInstaller.java
@@ -393,13 +393,8 @@ public class DemoInstaller implements DemoAPI {
}
private Predicate<? super Host> hasLocalMaster() {
- return new Predicate<Host>() {
- @Override
- public boolean apply(Host host) {
- return mastershipService.getLocalRole(
- host.location().deviceId()).equals(MastershipRole.MASTER);
- }
- };
+ return host -> mastershipService.getLocalRole(
+ host.location().deviceId()).equals(MastershipRole.MASTER);
}
diff --git a/framework/src/onos/apps/test/distributed-primitives/pom.xml b/framework/src/onos/apps/test/distributed-primitives/pom.xml
index e0376ee7..f77fd57f 100644
--- a/framework/src/onos/apps/test/distributed-primitives/pom.xml
+++ b/framework/src/onos/apps/test/distributed-primitives/pom.xml
@@ -23,7 +23,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps-test</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@@ -54,7 +54,7 @@
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-core-dist</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
diff --git a/framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/CounterTestIncrementCommand.java b/framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/CounterTestIncrementCommand.java
index d8e8e0be..12c8140a 100644
--- a/framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/CounterTestIncrementCommand.java
+++ b/framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/CounterTestIncrementCommand.java
@@ -91,9 +91,7 @@ public class CounterTestIncrementCommand extends AbstractShellCommand {
print("%s was updated to %d", counter, result.get(3, TimeUnit.SECONDS));
} catch (InterruptedException e) {
return;
- } catch (ExecutionException e) {
- e.printStackTrace();
- } catch (TimeoutException e) {
+ } catch (ExecutionException | TimeoutException e) {
e.printStackTrace();
}
}
diff --git a/framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/SetTestAddCommand.java b/framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/SetTestAddCommand.java
index 0ccc2d3c..204471c2 100644
--- a/framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/SetTestAddCommand.java
+++ b/framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/SetTestAddCommand.java
@@ -44,7 +44,7 @@ public class SetTestAddCommand extends AbstractShellCommand {
String[] values = null;
Set<String> set;
- Set<String> toAdd = new HashSet<String>();
+ Set<String> toAdd = new HashSet<>();
Serializer serializer = Serializer.using(
diff --git a/framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/SetTestGetCommand.java b/framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/SetTestGetCommand.java
index 792eab90..fb36a06a 100644
--- a/framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/SetTestGetCommand.java
+++ b/framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/SetTestGetCommand.java
@@ -49,8 +49,8 @@ public class SetTestGetCommand extends AbstractShellCommand {
String[] values = null;
Set<String> set;
- Set<String> toCheck = new HashSet<String>();
- String output = new String();
+ Set<String> toCheck = new HashSet<>();
+ String output = "";
Serializer serializer = Serializer.using(
new KryoNamespace.Builder().register(KryoNamespaces.BASIC).build());
diff --git a/framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/SetTestRemoveCommand.java b/framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/SetTestRemoveCommand.java
index 7e3a3e82..d1f81e42 100644
--- a/framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/SetTestRemoveCommand.java
+++ b/framework/src/onos/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/SetTestRemoveCommand.java
@@ -54,7 +54,7 @@ public class SetTestRemoveCommand extends AbstractShellCommand {
String[] values = null;
Set<String> set;
- Set<String> givenValues = new HashSet<String>();
+ Set<String> givenValues = new HashSet<>();
Serializer serializer = Serializer.using(
new KryoNamespace.Builder().register(KryoNamespaces.BASIC).build());
diff --git a/framework/src/onos/apps/test/election/pom.xml b/framework/src/onos/apps/test/election/pom.xml
index 4c18baee..3ceadb4d 100644
--- a/framework/src/onos/apps/test/election/pom.xml
+++ b/framework/src/onos/apps/test/election/pom.xml
@@ -23,7 +23,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps-test</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/test/intent-perf/pom.xml b/framework/src/onos/apps/test/intent-perf/pom.xml
index 7d325394..b837d114 100644
--- a/framework/src/onos/apps/test/intent-perf/pom.xml
+++ b/framework/src/onos/apps/test/intent-perf/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps-test</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/test/messaging-perf/pom.xml b/framework/src/onos/apps/test/messaging-perf/pom.xml
index 66a7c306..28de5b7c 100644
--- a/framework/src/onos/apps/test/messaging-perf/pom.xml
+++ b/framework/src/onos/apps/test/messaging-perf/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps-test</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/test/messaging-perf/src/main/java/org/onosproject/messagingperf/MessagingPerfApp.java b/framework/src/onos/apps/test/messaging-perf/src/main/java/org/onosproject/messagingperf/MessagingPerfApp.java
index 24697933..8b41bd5a 100644
--- a/framework/src/onos/apps/test/messaging-perf/src/main/java/org/onosproject/messagingperf/MessagingPerfApp.java
+++ b/framework/src/onos/apps/test/messaging-perf/src/main/java/org/onosproject/messagingperf/MessagingPerfApp.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.messagingperf;
import static com.google.common.base.Strings.isNullOrEmpty;
diff --git a/framework/src/onos/apps/test/pom.xml b/framework/src/onos/apps/test/pom.xml
index 41e1f201..ead2252e 100644
--- a/framework/src/onos/apps/test/pom.xml
+++ b/framework/src/onos/apps/test/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/virtualbng/pom.xml b/framework/src/onos/apps/virtualbng/pom.xml
index 835272ae..01caa66c 100644
--- a/framework/src/onos/apps/virtualbng/pom.xml
+++ b/framework/src/onos/apps/virtualbng/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/vtn/pom.xml b/framework/src/onos/apps/vtn/pom.xml
index 56aa99d6..fb8fcb13 100644
--- a/framework/src/onos/apps/vtn/pom.xml
+++ b/framework/src/onos/apps/vtn/pom.xml
@@ -1,12 +1,28 @@
<?xml version="1.0"?>
+<!--
+ ~ Copyright 2015 Open Networking Laboratory
+ ~
+ ~ 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.
+ -->
<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- 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"
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@@ -26,10 +42,6 @@
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
- <artifactId>onos-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
<artifactId>onos-incubator-api</artifactId>
</dependency>
<dependency>
diff --git a/framework/src/onos/apps/vtn/src/main/java/org/onosproject/vtn/impl/VTNManager.java b/framework/src/onos/apps/vtn/src/main/java/org/onosproject/vtn/impl/VTNManager.java
index 01c98825..ba4745b6 100644
--- a/framework/src/onos/apps/vtn/src/main/java/org/onosproject/vtn/impl/VTNManager.java
+++ b/framework/src/onos/apps/vtn/src/main/java/org/onosproject/vtn/impl/VTNManager.java
@@ -289,12 +289,10 @@ public class VTNManager implements VTNService {
ports.stream()
.filter(p -> p.name()
.equalsIgnoreCase(tunnelName))
- .forEach(p -> {
- programTunnelOut(sw.deviceId(),
- network.segmentationId(), p,
- host.mac(), appId,
- Objective.Operation.ADD);
- });
+ .forEach(p -> programTunnelOut(sw.deviceId(),
+ network.segmentationId(), p,
+ host.mac(), appId,
+ Objective.Operation.ADD));
}
});
programLocalIn(deviceId, network.segmentationId(), inPort, host.mac(),
@@ -355,12 +353,10 @@ public class VTNManager implements VTNService {
ports.stream()
.filter(p -> p.name()
.equalsIgnoreCase(tunnelName))
- .forEach(p -> {
- programTunnelOut(sw.deviceId(),
- segId, p,
- host.mac(), appId,
- Objective.Operation.REMOVE);
- });
+ .forEach(p -> programTunnelOut(sw.deviceId(),
+ segId, p,
+ host.mac(), appId,
+ Objective.Operation.REMOVE));
}
});
programLocalIn(deviceId, segId, inPort, host.mac(),
@@ -379,26 +375,18 @@ public class VTNManager implements VTNService {
Device device = event.subject();
if (Device.Type.CONTROLLER == device.type()
&& DeviceEvent.Type.DEVICE_ADDED == event.type()) {
- backgroundService.execute(() -> {
- onServerDetected(device);
- });
+ backgroundService.execute(() -> onServerDetected(device));
} else if (Device.Type.CONTROLLER == device.type()
&& DeviceEvent.Type.DEVICE_AVAILABILITY_CHANGED == event
.type()) {
- backgroundService.execute(() -> {
- onServerVanished(device);
- });
+ backgroundService.execute(() -> onServerVanished(device));
} else if (Device.Type.SWITCH == device.type()
&& DeviceEvent.Type.DEVICE_ADDED == event.type()) {
- backgroundService.execute(() -> {
- onOvsDetected(device);
- });
+ backgroundService.execute(() -> onOvsDetected(device));
} else if (Device.Type.SWITCH == device.type()
&& DeviceEvent.Type.DEVICE_AVAILABILITY_CHANGED == event
.type()) {
- backgroundService.execute(() -> {
- onOvsVanished(device);
- });
+ backgroundService.execute(() -> onOvsVanished(device));
} else {
log.info("Do nothing for this device type");
}
@@ -412,13 +400,9 @@ public class VTNManager implements VTNService {
public void event(HostEvent event) {
Host host = event.subject();
if (HostEvent.Type.HOST_ADDED == event.type()) {
- backgroundService.execute(() -> {
- onHostDetected(host);
- });
+ backgroundService.execute(() -> onHostDetected(host));
} else if (HostEvent.Type.HOST_REMOVED == event.type()) {
- backgroundService.execute(() -> {
- onHostVanished(host);
- });
+ backgroundService.execute(() -> onHostVanished(host));
} else if (HostEvent.Type.HOST_UPDATED == event.type()) {
backgroundService.execute(() -> {
onHostVanished(host);
@@ -626,7 +610,7 @@ public class VTNManager implements VTNService {
VirtualPort port = virtualPortService.getPort(portId);
TenantNetwork network = tenantNetworkService
.getNetwork(port.networkId());
- Collection<String> ifaceIds = new HashSet<String>();
+ Collection<String> ifaceIds = new HashSet<>();
Collection<VirtualPort> ports = virtualPortService
.getPorts(network.id());
Sets.newHashSet(ports).stream()
diff --git a/framework/src/onos/apps/vtnrsc/pom.xml b/framework/src/onos/apps/vtnrsc/pom.xml
index ce4e2c8c..0874f6d9 100644
--- a/framework/src/onos/apps/vtnrsc/pom.xml
+++ b/framework/src/onos/apps/vtnrsc/pom.xml
@@ -1,4 +1,19 @@
<?xml version="1.0"?>
+<!--
+ ~ Copyright 2015 Open Networking Laboratory
+ ~
+ ~ 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.
+ -->
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
@@ -6,7 +21,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/AllocationPool.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/AllocationPool.java
index 85d1fa9d..3d6ba8e8 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/AllocationPool.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/AllocationPool.java
@@ -1,38 +1,38 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-import org.onlab.packet.IpAddress;
-
-/**
- * The continuous IP address range between the start address and the end address for the allocation pools.
- */
-public interface AllocationPool {
-
- /**
- * The start address for the allocation pool.
- *
- * @return startIp
- */
- IpAddress startIp();
-
- /**
- * The end address for the allocation pool.
- *
- * @return endIp
- */
- IpAddress endIp();
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import org.onlab.packet.IpAddress;
+
+/**
+ * The continuous IP address range between the start address and the end address for the allocation pools.
+ */
+public interface AllocationPool {
+
+ /**
+ * The start address for the allocation pool.
+ *
+ * @return startIp
+ */
+ IpAddress startIp();
+
+ /**
+ * The end address for the allocation pool.
+ *
+ * @return endIp
+ */
+ IpAddress endIp();
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/AllowedAddressPair.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/AllowedAddressPair.java
index b60cb676..4e1028d8 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/AllowedAddressPair.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/AllowedAddressPair.java
@@ -1,94 +1,94 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-import static com.google.common.base.MoreObjects.toStringHelper;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Objects;
-
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-
-/**
- * Immutable representation of a allowed address pair.
- */
-public final class AllowedAddressPair {
- private final IpAddress ip;
- private final MacAddress mac;
- // Public construction is prohibited
- private AllowedAddressPair(IpAddress ip, MacAddress mac) {
- checkNotNull(ip, "IpAddress cannot be null");
- checkNotNull(mac, "MacAddress cannot be null");
- this.ip = ip;
- this.mac = mac;
- }
- /**
- * Returns the AllowedAddressPair ip address.
- *
- * @return ip address
- */
- public IpAddress ip() {
- return ip;
- }
-
- /**
- * Returns the AllowedAddressPair MAC address.
- *
- * @return MAC address
- */
- public MacAddress mac() {
- return mac;
- }
-
-
- /**
- * Creates a allowedAddressPair using the supplied ipAddress &amp;
- * macAddress.
- *
- * @param ip IP address
- * @param mac MAC address
- * @return AllowedAddressPair
- */
- public static AllowedAddressPair allowedAddressPair(IpAddress ip,
- MacAddress mac) {
- return new AllowedAddressPair(ip, mac);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(ip, mac);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof AllowedAddressPair) {
- final AllowedAddressPair that = (AllowedAddressPair) obj;
- return Objects.equals(this.ip, that.ip)
- && Objects.equals(this.mac, that.mac);
- }
- return false;
- }
-
- @Override
- public String toString() {
- return toStringHelper(this).add("ip", ip).add("mac", mac).toString();
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Objects;
+
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+
+/**
+ * Immutable representation of a allowed address pair.
+ */
+public final class AllowedAddressPair {
+ private final IpAddress ip;
+ private final MacAddress mac;
+ // Public construction is prohibited
+ private AllowedAddressPair(IpAddress ip, MacAddress mac) {
+ checkNotNull(ip, "IpAddress cannot be null");
+ checkNotNull(mac, "MacAddress cannot be null");
+ this.ip = ip;
+ this.mac = mac;
+ }
+ /**
+ * Returns the AllowedAddressPair ip address.
+ *
+ * @return ip address
+ */
+ public IpAddress ip() {
+ return ip;
+ }
+
+ /**
+ * Returns the AllowedAddressPair MAC address.
+ *
+ * @return MAC address
+ */
+ public MacAddress mac() {
+ return mac;
+ }
+
+
+ /**
+ * Creates a allowedAddressPair using the supplied ipAddress &amp;
+ * macAddress.
+ *
+ * @param ip IP address
+ * @param mac MAC address
+ * @return AllowedAddressPair
+ */
+ public static AllowedAddressPair allowedAddressPair(IpAddress ip,
+ MacAddress mac) {
+ return new AllowedAddressPair(ip, mac);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(ip, mac);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof AllowedAddressPair) {
+ final AllowedAddressPair that = (AllowedAddressPair) obj;
+ return Objects.equals(this.ip, that.ip)
+ && Objects.equals(this.mac, that.mac);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return toStringHelper(this).add("ip", ip).add("mac", mac).toString();
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/BindingHostId.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/BindingHostId.java
index da403876..c715d08a 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/BindingHostId.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/BindingHostId.java
@@ -1,57 +1,72 @@
-package org.onosproject.vtnrsc;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Objects;
-
-public final class BindingHostId {
- private final String bindingHostId;
-
- // Public construction is prohibited
- private BindingHostId(String bindingHostId) {
- checkNotNull(bindingHostId, "BindingHosttId cannot be null");
- this.bindingHostId = bindingHostId;
- }
-
- /**
- * Creates a BindingHostId identifier.
- *
- * @param bindingHostId the bindingHostId identifier
- * @return the bindingHostId identifier
- */
- public static BindingHostId bindingHostId(String bindingHostId) {
- return new BindingHostId(bindingHostId);
- }
-
- /**
- * Returns the bindingHostId identifier.
- *
- * @return the bindingHostId identifier
- */
- public String bindingHostId() {
- return bindingHostId;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(bindingHostId);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof BindingHostId) {
- final BindingHostId that = (BindingHostId) obj;
- return this.getClass() == that.getClass()
- && Objects.equals(this.bindingHostId, that.bindingHostId);
- }
- return false;
- }
-
- @Override
- public String toString() {
- return bindingHostId;
- }
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Objects;
+
+public final class BindingHostId {
+ private final String bindingHostId;
+
+ // Public construction is prohibited
+ private BindingHostId(String bindingHostId) {
+ checkNotNull(bindingHostId, "BindingHosttId cannot be null");
+ this.bindingHostId = bindingHostId;
+ }
+
+ /**
+ * Creates a BindingHostId identifier.
+ *
+ * @param bindingHostId the bindingHostId identifier
+ * @return the bindingHostId identifier
+ */
+ public static BindingHostId bindingHostId(String bindingHostId) {
+ return new BindingHostId(bindingHostId);
+ }
+
+ /**
+ * Returns the bindingHostId identifier.
+ *
+ * @return the bindingHostId identifier
+ */
+ public String bindingHostId() {
+ return bindingHostId;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(bindingHostId);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof BindingHostId) {
+ final BindingHostId that = (BindingHostId) obj;
+ return this.getClass() == that.getClass()
+ && Objects.equals(this.bindingHostId, that.bindingHostId);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return bindingHostId;
+ }
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultAllocationPool.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultAllocationPool.java
index 6a6a4750..8a480194 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultAllocationPool.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultAllocationPool.java
@@ -1,81 +1,81 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-import static com.google.common.base.MoreObjects.toStringHelper;
-import static com.google.common.base.Preconditions.checkNotNull;
-import java.util.Objects;
-
-import org.onlab.packet.IpAddress;
-
-/**
- * The continuous IP address range between the start address and the end address
- * for the allocation pools.
- */
-public final class DefaultAllocationPool implements AllocationPool {
-
- private final IpAddress startIp;
- private final IpAddress endIp;
-
- /**
- * Creates an AllocationPool by using the start IP address and the end IP
- * address.
- *
- * @param startIp the start IP address of the allocation pool
- * @param endIp the end IP address of the allocation pool
- */
- public DefaultAllocationPool(IpAddress startIp, IpAddress endIp) {
- checkNotNull(startIp, "StartIp cannot be null");
- checkNotNull(endIp, "EndIp cannot be null");
- this.startIp = startIp;
- this.endIp = endIp;
- }
-
- @Override
- public IpAddress startIp() {
- return startIp;
- }
-
- @Override
- public IpAddress endIp() {
- return endIp;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(startIp, endIp);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof DefaultAllocationPool) {
- final DefaultAllocationPool other = (DefaultAllocationPool) obj;
- return Objects.equals(this.startIp, other.startIp)
- && Objects.equals(this.endIp, other.endIp);
- }
- return false;
- }
-
- @Override
- public String toString() {
- return toStringHelper(this).add("startIp", startIp).add("endIp", endIp)
- .toString();
- }
-}
-
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
+import java.util.Objects;
+
+import org.onlab.packet.IpAddress;
+
+/**
+ * The continuous IP address range between the start address and the end address
+ * for the allocation pools.
+ */
+public final class DefaultAllocationPool implements AllocationPool {
+
+ private final IpAddress startIp;
+ private final IpAddress endIp;
+
+ /**
+ * Creates an AllocationPool by using the start IP address and the end IP
+ * address.
+ *
+ * @param startIp the start IP address of the allocation pool
+ * @param endIp the end IP address of the allocation pool
+ */
+ public DefaultAllocationPool(IpAddress startIp, IpAddress endIp) {
+ checkNotNull(startIp, "StartIp cannot be null");
+ checkNotNull(endIp, "EndIp cannot be null");
+ this.startIp = startIp;
+ this.endIp = endIp;
+ }
+
+ @Override
+ public IpAddress startIp() {
+ return startIp;
+ }
+
+ @Override
+ public IpAddress endIp() {
+ return endIp;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(startIp, endIp);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof DefaultAllocationPool) {
+ final DefaultAllocationPool other = (DefaultAllocationPool) obj;
+ return Objects.equals(this.startIp, other.startIp)
+ && Objects.equals(this.endIp, other.endIp);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return toStringHelper(this).add("startIp", startIp).add("endIp", endIp)
+ .toString();
+ }
+}
+
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultHostRoute.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultHostRoute.java
index c84ae181..8679100d 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultHostRoute.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultHostRoute.java
@@ -1,79 +1,79 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-import static com.google.common.base.MoreObjects.toStringHelper;
-
-import java.util.Objects;
-
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.IpPrefix;
-
-/**
- * Host route dictionaries for the subnet.
- */
-public final class DefaultHostRoute implements HostRoute {
-
- private final IpAddress nexthop;
- private final IpPrefix destination;
-
- /**
- *
- * Creates a DefaultHostRoute by using the next hop and the destination.
- *
- * @param nexthop of the DefaultHostRoute
- * @param destination of the DefaultHostRoute
- */
- public DefaultHostRoute(IpAddress nexthop, IpPrefix destination) {
- this.nexthop = nexthop;
- this.destination = destination;
- }
-
- @Override
- public IpAddress nexthop() {
- return nexthop;
- }
-
- @Override
- public IpPrefix destination() {
- return destination;
- }
-
- @Override
- public String toString() {
- return toStringHelper(this).add("nexthop", nexthop)
- .add("destination", destination).toString();
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(nexthop, destination);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof DefaultHostRoute) {
- final DefaultHostRoute other = (DefaultHostRoute) obj;
- return Objects.equals(this.nexthop, other.nexthop)
- && Objects.equals(this.destination, other.destination);
- }
- return false;
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.Objects;
+
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.IpPrefix;
+
+/**
+ * Host route dictionaries for the subnet.
+ */
+public final class DefaultHostRoute implements HostRoute {
+
+ private final IpAddress nexthop;
+ private final IpPrefix destination;
+
+ /**
+ *
+ * Creates a DefaultHostRoute by using the next hop and the destination.
+ *
+ * @param nexthop of the DefaultHostRoute
+ * @param destination of the DefaultHostRoute
+ */
+ public DefaultHostRoute(IpAddress nexthop, IpPrefix destination) {
+ this.nexthop = nexthop;
+ this.destination = destination;
+ }
+
+ @Override
+ public IpAddress nexthop() {
+ return nexthop;
+ }
+
+ @Override
+ public IpPrefix destination() {
+ return destination;
+ }
+
+ @Override
+ public String toString() {
+ return toStringHelper(this).add("nexthop", nexthop)
+ .add("destination", destination).toString();
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(nexthop, destination);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof DefaultHostRoute) {
+ final DefaultHostRoute other = (DefaultHostRoute) obj;
+ return Objects.equals(this.nexthop, other.nexthop)
+ && Objects.equals(this.destination, other.destination);
+ }
+ return false;
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultSubnet.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultSubnet.java
index 88fabffb..6049b558 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultSubnet.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultSubnet.java
@@ -1,183 +1,183 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-import static com.google.common.base.MoreObjects.toStringHelper;
-
-import java.util.Objects;
-import java.util.Set;
-
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.IpAddress.Version;
-import org.onlab.packet.IpPrefix;
-
-/**
- * Default implementation of Subnet interface .
- */
-public final class DefaultSubnet implements Subnet {
- private final SubnetId id;
- private final String subnetName;
- private final TenantNetworkId networkId;
- private final TenantId tenantId;
- private final Version ipVersion;
- private final IpPrefix cidr;
- private final IpAddress gatewayIp;
- private final boolean dhcpEnabled;
- private final boolean shared;
- private final Mode ipV6AddressMode;
- private final Mode ipV6RaMode;
- private final Set<HostRoute> hostRoutes;
- private final Set<AllocationPool> allocationPools;
-
- /**
- * Creates a subnet object.
- *
- * @param id subnet identifier
- * @param subnetName the name of subnet
- * @param networkId network identifier
- * @param tenantId tenant identifier
- * @param ipVersion Version of ipv4 or ipv6
- * @param cidr the cidr
- * @param gatewayIp gateway ip
- * @param dhcpEnabled dhcp enabled or not
- * @param shared indicates whether this network is shared across all
- * tenants, By default, only administrative user can change this
- * value
- * @param hostRoutes a collection of host routes
- * @param ipV6AddressMode ipV6AddressMode
- * @param ipV6RaMode ipV6RaMode
- * @param allocationPoolsIt a collection of allocationPools
- */
- public DefaultSubnet(SubnetId id, String subnetName,
- TenantNetworkId networkId, TenantId tenantId,
- Version ipVersion, IpPrefix cidr, IpAddress gatewayIp,
- boolean dhcpEnabled, boolean shared,
- Set<HostRoute> hostRoutes, Mode ipV6AddressMode,
- Mode ipV6RaMode,
- Set<AllocationPool> allocationPoolsIt) {
- this.id = id;
- this.subnetName = subnetName;
- this.networkId = networkId;
- this.tenantId = tenantId;
- this.ipVersion = ipVersion;
- this.cidr = cidr;
- this.gatewayIp = gatewayIp;
- this.dhcpEnabled = dhcpEnabled;
- this.shared = shared;
- this.ipV6AddressMode = ipV6AddressMode;
- this.ipV6RaMode = ipV6RaMode;
- this.hostRoutes = hostRoutes;
- this.allocationPools = allocationPoolsIt;
- }
-
- @Override
- public SubnetId id() {
- return id;
- }
-
- @Override
- public String subnetName() {
- return subnetName;
- }
-
- @Override
- public TenantNetworkId networkId() {
- return networkId;
- }
-
- @Override
- public TenantId tenantId() {
- return tenantId;
- }
-
- @Override
- public Version ipVersion() {
- return ipVersion;
- }
-
- @Override
- public IpPrefix cidr() {
- return cidr;
- }
-
- @Override
- public IpAddress gatewayIp() {
- return gatewayIp;
- }
-
- @Override
- public boolean dhcpEnabled() {
- return dhcpEnabled;
- }
-
- @Override
- public boolean shared() {
- return shared;
- }
-
- @Override
- public Iterable<HostRoute> hostRoutes() {
- return hostRoutes;
- }
-
- @Override
- public Mode ipV6AddressMode() {
- return ipV6AddressMode;
- }
-
- @Override
- public Mode ipV6RaMode() {
- return ipV6RaMode;
- }
-
- @Override
- public Iterable<AllocationPool> allocationPools() {
- return allocationPools;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(id, subnetName, ipVersion, cidr, gatewayIp,
- dhcpEnabled, shared, tenantId);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof DefaultSubnet) {
- final DefaultSubnet that = (DefaultSubnet) obj;
- return Objects.equals(this.id, that.id)
- && Objects.equals(this.subnetName, that.subnetName)
- && Objects.equals(this.ipVersion, that.ipVersion)
- && Objects.equals(this.cidr, that.cidr)
- && Objects.equals(this.shared, that.shared)
- && Objects.equals(this.gatewayIp, that.gatewayIp)
- && Objects.equals(this.dhcpEnabled, that.dhcpEnabled);
- }
- return false;
- }
-
- @Override
- public String toString() {
- return toStringHelper(this).add("id", id).add("subnetName", subnetName)
- .add("ipVersion", ipVersion).add("cidr", cidr)
- .add("shared", shared).add("gatewayIp", gatewayIp)
- .add("dhcpEnabled", dhcpEnabled).toString();
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.Objects;
+import java.util.Set;
+
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.IpAddress.Version;
+import org.onlab.packet.IpPrefix;
+
+/**
+ * Default implementation of Subnet interface .
+ */
+public final class DefaultSubnet implements Subnet {
+ private final SubnetId id;
+ private final String subnetName;
+ private final TenantNetworkId networkId;
+ private final TenantId tenantId;
+ private final Version ipVersion;
+ private final IpPrefix cidr;
+ private final IpAddress gatewayIp;
+ private final boolean dhcpEnabled;
+ private final boolean shared;
+ private final Mode ipV6AddressMode;
+ private final Mode ipV6RaMode;
+ private final Set<HostRoute> hostRoutes;
+ private final Set<AllocationPool> allocationPools;
+
+ /**
+ * Creates a subnet object.
+ *
+ * @param id subnet identifier
+ * @param subnetName the name of subnet
+ * @param networkId network identifier
+ * @param tenantId tenant identifier
+ * @param ipVersion Version of ipv4 or ipv6
+ * @param cidr the cidr
+ * @param gatewayIp gateway ip
+ * @param dhcpEnabled dhcp enabled or not
+ * @param shared indicates whether this network is shared across all
+ * tenants, By default, only administrative user can change this
+ * value
+ * @param hostRoutes a collection of host routes
+ * @param ipV6AddressMode ipV6AddressMode
+ * @param ipV6RaMode ipV6RaMode
+ * @param allocationPoolsIt a collection of allocationPools
+ */
+ public DefaultSubnet(SubnetId id, String subnetName,
+ TenantNetworkId networkId, TenantId tenantId,
+ Version ipVersion, IpPrefix cidr, IpAddress gatewayIp,
+ boolean dhcpEnabled, boolean shared,
+ Set<HostRoute> hostRoutes, Mode ipV6AddressMode,
+ Mode ipV6RaMode,
+ Set<AllocationPool> allocationPoolsIt) {
+ this.id = id;
+ this.subnetName = subnetName;
+ this.networkId = networkId;
+ this.tenantId = tenantId;
+ this.ipVersion = ipVersion;
+ this.cidr = cidr;
+ this.gatewayIp = gatewayIp;
+ this.dhcpEnabled = dhcpEnabled;
+ this.shared = shared;
+ this.ipV6AddressMode = ipV6AddressMode;
+ this.ipV6RaMode = ipV6RaMode;
+ this.hostRoutes = hostRoutes;
+ this.allocationPools = allocationPoolsIt;
+ }
+
+ @Override
+ public SubnetId id() {
+ return id;
+ }
+
+ @Override
+ public String subnetName() {
+ return subnetName;
+ }
+
+ @Override
+ public TenantNetworkId networkId() {
+ return networkId;
+ }
+
+ @Override
+ public TenantId tenantId() {
+ return tenantId;
+ }
+
+ @Override
+ public Version ipVersion() {
+ return ipVersion;
+ }
+
+ @Override
+ public IpPrefix cidr() {
+ return cidr;
+ }
+
+ @Override
+ public IpAddress gatewayIp() {
+ return gatewayIp;
+ }
+
+ @Override
+ public boolean dhcpEnabled() {
+ return dhcpEnabled;
+ }
+
+ @Override
+ public boolean shared() {
+ return shared;
+ }
+
+ @Override
+ public Iterable<HostRoute> hostRoutes() {
+ return hostRoutes;
+ }
+
+ @Override
+ public Mode ipV6AddressMode() {
+ return ipV6AddressMode;
+ }
+
+ @Override
+ public Mode ipV6RaMode() {
+ return ipV6RaMode;
+ }
+
+ @Override
+ public Iterable<AllocationPool> allocationPools() {
+ return allocationPools;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id, subnetName, ipVersion, cidr, gatewayIp,
+ dhcpEnabled, shared, tenantId);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof DefaultSubnet) {
+ final DefaultSubnet that = (DefaultSubnet) obj;
+ return Objects.equals(this.id, that.id)
+ && Objects.equals(this.subnetName, that.subnetName)
+ && Objects.equals(this.ipVersion, that.ipVersion)
+ && Objects.equals(this.cidr, that.cidr)
+ && Objects.equals(this.shared, that.shared)
+ && Objects.equals(this.gatewayIp, that.gatewayIp)
+ && Objects.equals(this.dhcpEnabled, that.dhcpEnabled);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return toStringHelper(this).add("id", id).add("subnetName", subnetName)
+ .add("ipVersion", ipVersion).add("cidr", cidr)
+ .add("shared", shared).add("gatewayIp", gatewayIp)
+ .add("dhcpEnabled", dhcpEnabled).toString();
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultTenantNetwork.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultTenantNetwork.java
index 21650789..8c941ea2 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultTenantNetwork.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultTenantNetwork.java
@@ -1,160 +1,160 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-import static com.google.common.base.MoreObjects.toStringHelper;
-
-import java.util.Objects;
-
-/**
- * Default implementation of TenantNetwork interface.
- */
-public final class DefaultTenantNetwork implements TenantNetwork {
- private final TenantNetworkId id;
- private final String name;
- private final boolean adminStateUp;
- private final State state;
- private final boolean shared;
- private final Type type;
- private final TenantId tenantId;
- private final boolean routerExternal;
- private final PhysicalNetwork physicalNetwork;
- private final SegmentationId segmentationId;
-
- /**
- * Creates a neutronNetwork element attributed to the specified provider.
- *
- * @param id network identifier
- * @param name the network name
- * @param adminStateUp administrative state of the network
- * @param state the network state
- * @param shared indicates whether this network is shared across all
- * tenants, By default, only administrative user can change this
- * value
- * @param tenantId tenant identifier
- * @param routerExternal network routerExternal
- * @param type the network type
- * @param physicalNetwork physicalNetwork identifier
- * @param segmentationId segmentation identifier
- */
- public DefaultTenantNetwork(TenantNetworkId id, String name,
- boolean adminStateUp, State state,
- boolean shared, TenantId tenantId,
- boolean routerExternal, Type type,
- PhysicalNetwork physicalNetwork,
- SegmentationId segmentationId) {
- this.id = id;
- this.name = name;
- this.adminStateUp = adminStateUp;
- this.state = state;
- this.shared = shared;
- this.type = type;
- this.tenantId = tenantId;
- this.routerExternal = routerExternal;
- this.physicalNetwork = physicalNetwork;
- this.segmentationId = segmentationId;
- }
-
- @Override
- public TenantNetworkId id() {
- return id;
- }
-
- @Override
- public String name() {
- return name;
- }
-
- @Override
- public boolean adminStateUp() {
- return adminStateUp;
- }
-
- @Override
- public State state() {
- return state;
- }
-
- @Override
- public boolean shared() {
- return shared;
- }
-
- @Override
- public TenantId tenantId() {
- return tenantId;
- }
-
- @Override
- public boolean routerExternal() {
- return routerExternal;
- }
-
- @Override
- public Type type() {
- return type;
- }
-
- @Override
- public PhysicalNetwork physicalNetwork() {
- return physicalNetwork;
- }
-
- @Override
- public SegmentationId segmentationId() {
- return segmentationId;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(id, name, adminStateUp, state, shared, tenantId,
- routerExternal, type, physicalNetwork,
- segmentationId);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof DefaultTenantNetwork) {
- final DefaultTenantNetwork that = (DefaultTenantNetwork) obj;
- return Objects.equals(this.id, that.id)
- && Objects.equals(this.name, that.name)
- && Objects.equals(this.adminStateUp, that.adminStateUp)
- && Objects.equals(this.state, that.state)
- && Objects.equals(this.shared, that.shared)
- && Objects.equals(this.tenantId, that.tenantId)
- && Objects.equals(this.routerExternal, that.routerExternal)
- && Objects.equals(this.type, that.type)
- && Objects.equals(this.physicalNetwork,
- that.physicalNetwork)
- && Objects.equals(this.segmentationId, that.segmentationId);
- }
- return false;
- }
-
- @Override
- public String toString() {
- return toStringHelper(this).add("id", id).add("name", name)
- .add("adminStateUp", adminStateUp).add("state", state)
- .add("shared", shared).add("tenantId", tenantId)
- .add("routeExternal", routerExternal).add("type", type)
- .add("physicalNetwork", physicalNetwork)
- .add("segmentationId", segmentationId).toString();
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.Objects;
+
+/**
+ * Default implementation of TenantNetwork interface.
+ */
+public final class DefaultTenantNetwork implements TenantNetwork {
+ private final TenantNetworkId id;
+ private final String name;
+ private final boolean adminStateUp;
+ private final State state;
+ private final boolean shared;
+ private final Type type;
+ private final TenantId tenantId;
+ private final boolean routerExternal;
+ private final PhysicalNetwork physicalNetwork;
+ private final SegmentationId segmentationId;
+
+ /**
+ * Creates a neutronNetwork element attributed to the specified provider.
+ *
+ * @param id network identifier
+ * @param name the network name
+ * @param adminStateUp administrative state of the network
+ * @param state the network state
+ * @param shared indicates whether this network is shared across all
+ * tenants, By default, only administrative user can change this
+ * value
+ * @param tenantId tenant identifier
+ * @param routerExternal network routerExternal
+ * @param type the network type
+ * @param physicalNetwork physicalNetwork identifier
+ * @param segmentationId segmentation identifier
+ */
+ public DefaultTenantNetwork(TenantNetworkId id, String name,
+ boolean adminStateUp, State state,
+ boolean shared, TenantId tenantId,
+ boolean routerExternal, Type type,
+ PhysicalNetwork physicalNetwork,
+ SegmentationId segmentationId) {
+ this.id = id;
+ this.name = name;
+ this.adminStateUp = adminStateUp;
+ this.state = state;
+ this.shared = shared;
+ this.type = type;
+ this.tenantId = tenantId;
+ this.routerExternal = routerExternal;
+ this.physicalNetwork = physicalNetwork;
+ this.segmentationId = segmentationId;
+ }
+
+ @Override
+ public TenantNetworkId id() {
+ return id;
+ }
+
+ @Override
+ public String name() {
+ return name;
+ }
+
+ @Override
+ public boolean adminStateUp() {
+ return adminStateUp;
+ }
+
+ @Override
+ public State state() {
+ return state;
+ }
+
+ @Override
+ public boolean shared() {
+ return shared;
+ }
+
+ @Override
+ public TenantId tenantId() {
+ return tenantId;
+ }
+
+ @Override
+ public boolean routerExternal() {
+ return routerExternal;
+ }
+
+ @Override
+ public Type type() {
+ return type;
+ }
+
+ @Override
+ public PhysicalNetwork physicalNetwork() {
+ return physicalNetwork;
+ }
+
+ @Override
+ public SegmentationId segmentationId() {
+ return segmentationId;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id, name, adminStateUp, state, shared, tenantId,
+ routerExternal, type, physicalNetwork,
+ segmentationId);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof DefaultTenantNetwork) {
+ final DefaultTenantNetwork that = (DefaultTenantNetwork) obj;
+ return Objects.equals(this.id, that.id)
+ && Objects.equals(this.name, that.name)
+ && Objects.equals(this.adminStateUp, that.adminStateUp)
+ && Objects.equals(this.state, that.state)
+ && Objects.equals(this.shared, that.shared)
+ && Objects.equals(this.tenantId, that.tenantId)
+ && Objects.equals(this.routerExternal, that.routerExternal)
+ && Objects.equals(this.type, that.type)
+ && Objects.equals(this.physicalNetwork,
+ that.physicalNetwork)
+ && Objects.equals(this.segmentationId, that.segmentationId);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return toStringHelper(this).add("id", id).add("name", name)
+ .add("adminStateUp", adminStateUp).add("state", state)
+ .add("shared", shared).add("tenantId", tenantId)
+ .add("routeExternal", routerExternal).add("type", type)
+ .add("physicalNetwork", physicalNetwork)
+ .add("segmentationId", segmentationId).toString();
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultVirtualPort.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultVirtualPort.java
index adf3a3a3..9ee85da7 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultVirtualPort.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultVirtualPort.java
@@ -1,229 +1,229 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-import static com.google.common.base.MoreObjects.toStringHelper;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-
-import org.onlab.packet.MacAddress;
-import org.onosproject.net.DeviceId;
-
-/**
- * Default implementation of VirtualPort interface .
- */
-public final class DefaultVirtualPort implements VirtualPort {
- private final VirtualPortId id;
- private final TenantNetworkId networkId;
- private final Boolean adminStateUp;
- private final String name;
- private final State state;
- private final MacAddress macAddress;
- private final TenantId tenantId;
- private final String deviceOwner;
- private final DeviceId deviceId;
- private final Set<FixedIp> fixedIps;
- private final BindingHostId bindingHostId;
- private final String bindingVnicType;
- private final String bindingVifType;
- private final String bindingVifDetails;
- private final Set<AllowedAddressPair> allowedAddressPairs;
- private final Set<SecurityGroup> securityGroups;
-
- /**
- * Creates a VirtualPort object.
- *
- * @param id the virtual port identifier
- * @param networkId the network identifier
- * @param adminStateUp adminStateup true or false
- * @param strMap the map of properties of virtual port
- * @param state virtual port state
- * @param macAddress the MAC address
- * @param tenantId the tenant identifier
- * @param deviceId the device identifier
- * @param fixedIps set of fixed IP
- * @param bindingHostId the binding host identifier
- * @param allowedAddressPairs the collection of allowdeAddressPairs
- * @param securityGroups the collection of securityGroups
- */
- public DefaultVirtualPort(VirtualPortId id,
- TenantNetworkId networkId,
- Boolean adminStateUp,
- Map<String, String> strMap,
- State state,
- MacAddress macAddress,
- TenantId tenantId,
- DeviceId deviceId,
- Set<FixedIp> fixedIps,
- BindingHostId bindingHostId,
- Set<AllowedAddressPair> allowedAddressPairs,
- Set<SecurityGroup> securityGroups) {
- this.id = id;
- this.networkId = networkId;
- this.adminStateUp = adminStateUp;
- this.name = strMap.get("name");
- this.state = state;
- this.macAddress = macAddress;
- this.tenantId = tenantId;
- this.deviceOwner = strMap.get("deviceOwner");
- this.deviceId = deviceId;
- this.fixedIps = fixedIps;
- this.bindingHostId = bindingHostId;
- this.bindingVnicType = strMap.get("bindingVnicType");
- this.bindingVifType = strMap.get("bindingVifType");
- this.bindingVifDetails = strMap.get("bindingVifDetails");
- this.allowedAddressPairs = allowedAddressPairs;
- this.securityGroups = securityGroups;
- }
-
- @Override
- public VirtualPortId portId() {
- return id;
- }
-
- @Override
- public TenantNetworkId networkId() {
- return networkId;
- }
-
- @Override
- public String name() {
- return name;
- }
-
- @Override
- public boolean adminStateUp() {
- return adminStateUp;
- }
-
- @Override
- public State state() {
- return state;
- }
-
- @Override
- public MacAddress macAddress() {
- return macAddress;
- }
-
- @Override
- public TenantId tenantId() {
- return tenantId;
- }
-
- @Override
- public DeviceId deviceId() {
- return deviceId;
- }
-
- @Override
- public String deviceOwner() {
- return deviceOwner;
- }
-
- @Override
- public Collection<AllowedAddressPair> allowedAddressPairs() {
- return allowedAddressPairs;
- }
-
- @Override
- public Set<FixedIp> fixedIps() {
- return fixedIps;
- }
-
- @Override
- public BindingHostId bindingHostId() {
- return bindingHostId;
- }
-
- @Override
- public String bindingVnicType() {
- return bindingVifType;
- }
-
- @Override
- public String bindingVifType() {
- return bindingVifType;
- }
-
- @Override
- public String bindingVifDetails() {
- return bindingVifDetails;
- }
-
- @Override
- public Collection<SecurityGroup> securityGroups() {
- return securityGroups;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(id, networkId, adminStateUp, name, state,
- macAddress, tenantId, deviceId, deviceOwner,
- allowedAddressPairs, fixedIps, bindingHostId,
- bindingVnicType, bindingVifType, bindingVifDetails,
- securityGroups);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof DefaultVirtualPort) {
- final DefaultVirtualPort that = (DefaultVirtualPort) obj;
- return Objects.equals(this.id, that.id)
- && Objects.equals(this.networkId, that.networkId)
- && Objects.equals(this.adminStateUp, that.adminStateUp)
- && Objects.equals(this.state, that.state)
- && Objects.equals(this.name, that.name)
- && Objects.equals(this.tenantId, that.tenantId)
- && Objects.equals(this.macAddress, that.macAddress)
- && Objects.equals(this.deviceId, that.deviceId)
- && Objects.equals(this.deviceOwner, that.deviceOwner)
- && Objects.equals(this.allowedAddressPairs,
- that.allowedAddressPairs)
- && Objects.equals(this.fixedIps, that.fixedIps)
- && Objects.equals(this.bindingHostId, that.bindingHostId)
- && Objects.equals(this.bindingVifDetails,
- that.bindingVifDetails)
- && Objects.equals(this.bindingVifType, that.bindingVifType)
- && Objects.equals(this.bindingVnicType,
- that.bindingVnicType)
- && Objects.equals(this.securityGroups, that.securityGroups);
- }
- return false;
- }
-
- @Override
- public String toString() {
- return toStringHelper(this).add("id", id).add("network_id", networkId)
- .add("adminStateUp", adminStateUp).add("state", state)
- .add("name", name).add("state", state)
- .add("macAddress", macAddress).add("tenantId", tenantId)
- .add("deviced", deviceId).add("deviceOwner", deviceOwner)
- .add("allowedAddressPairs", allowedAddressPairs)
- .add("fixedIp", fixedIps).add("bindingHostId", bindingHostId)
- .add("bindingVnicType", bindingVnicType)
- .add("bindingVifDetails", bindingVifDetails)
- .add("bindingVifType", bindingVifType)
- .add("securityGroups", securityGroups).toString();
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+
+import org.onlab.packet.MacAddress;
+import org.onosproject.net.DeviceId;
+
+/**
+ * Default implementation of VirtualPort interface .
+ */
+public final class DefaultVirtualPort implements VirtualPort {
+ private final VirtualPortId id;
+ private final TenantNetworkId networkId;
+ private final Boolean adminStateUp;
+ private final String name;
+ private final State state;
+ private final MacAddress macAddress;
+ private final TenantId tenantId;
+ private final String deviceOwner;
+ private final DeviceId deviceId;
+ private final Set<FixedIp> fixedIps;
+ private final BindingHostId bindingHostId;
+ private final String bindingVnicType;
+ private final String bindingVifType;
+ private final String bindingVifDetails;
+ private final Set<AllowedAddressPair> allowedAddressPairs;
+ private final Set<SecurityGroup> securityGroups;
+
+ /**
+ * Creates a VirtualPort object.
+ *
+ * @param id the virtual port identifier
+ * @param networkId the network identifier
+ * @param adminStateUp adminStateup true or false
+ * @param strMap the map of properties of virtual port
+ * @param state virtual port state
+ * @param macAddress the MAC address
+ * @param tenantId the tenant identifier
+ * @param deviceId the device identifier
+ * @param fixedIps set of fixed IP
+ * @param bindingHostId the binding host identifier
+ * @param allowedAddressPairs the collection of allowdeAddressPairs
+ * @param securityGroups the collection of securityGroups
+ */
+ public DefaultVirtualPort(VirtualPortId id,
+ TenantNetworkId networkId,
+ Boolean adminStateUp,
+ Map<String, String> strMap,
+ State state,
+ MacAddress macAddress,
+ TenantId tenantId,
+ DeviceId deviceId,
+ Set<FixedIp> fixedIps,
+ BindingHostId bindingHostId,
+ Set<AllowedAddressPair> allowedAddressPairs,
+ Set<SecurityGroup> securityGroups) {
+ this.id = id;
+ this.networkId = networkId;
+ this.adminStateUp = adminStateUp;
+ this.name = strMap.get("name");
+ this.state = state;
+ this.macAddress = macAddress;
+ this.tenantId = tenantId;
+ this.deviceOwner = strMap.get("deviceOwner");
+ this.deviceId = deviceId;
+ this.fixedIps = fixedIps;
+ this.bindingHostId = bindingHostId;
+ this.bindingVnicType = strMap.get("bindingVnicType");
+ this.bindingVifType = strMap.get("bindingVifType");
+ this.bindingVifDetails = strMap.get("bindingVifDetails");
+ this.allowedAddressPairs = allowedAddressPairs;
+ this.securityGroups = securityGroups;
+ }
+
+ @Override
+ public VirtualPortId portId() {
+ return id;
+ }
+
+ @Override
+ public TenantNetworkId networkId() {
+ return networkId;
+ }
+
+ @Override
+ public String name() {
+ return name;
+ }
+
+ @Override
+ public boolean adminStateUp() {
+ return adminStateUp;
+ }
+
+ @Override
+ public State state() {
+ return state;
+ }
+
+ @Override
+ public MacAddress macAddress() {
+ return macAddress;
+ }
+
+ @Override
+ public TenantId tenantId() {
+ return tenantId;
+ }
+
+ @Override
+ public DeviceId deviceId() {
+ return deviceId;
+ }
+
+ @Override
+ public String deviceOwner() {
+ return deviceOwner;
+ }
+
+ @Override
+ public Collection<AllowedAddressPair> allowedAddressPairs() {
+ return allowedAddressPairs;
+ }
+
+ @Override
+ public Set<FixedIp> fixedIps() {
+ return fixedIps;
+ }
+
+ @Override
+ public BindingHostId bindingHostId() {
+ return bindingHostId;
+ }
+
+ @Override
+ public String bindingVnicType() {
+ return bindingVifType;
+ }
+
+ @Override
+ public String bindingVifType() {
+ return bindingVifType;
+ }
+
+ @Override
+ public String bindingVifDetails() {
+ return bindingVifDetails;
+ }
+
+ @Override
+ public Collection<SecurityGroup> securityGroups() {
+ return securityGroups;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id, networkId, adminStateUp, name, state,
+ macAddress, tenantId, deviceId, deviceOwner,
+ allowedAddressPairs, fixedIps, bindingHostId,
+ bindingVnicType, bindingVifType, bindingVifDetails,
+ securityGroups);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof DefaultVirtualPort) {
+ final DefaultVirtualPort that = (DefaultVirtualPort) obj;
+ return Objects.equals(this.id, that.id)
+ && Objects.equals(this.networkId, that.networkId)
+ && Objects.equals(this.adminStateUp, that.adminStateUp)
+ && Objects.equals(this.state, that.state)
+ && Objects.equals(this.name, that.name)
+ && Objects.equals(this.tenantId, that.tenantId)
+ && Objects.equals(this.macAddress, that.macAddress)
+ && Objects.equals(this.deviceId, that.deviceId)
+ && Objects.equals(this.deviceOwner, that.deviceOwner)
+ && Objects.equals(this.allowedAddressPairs,
+ that.allowedAddressPairs)
+ && Objects.equals(this.fixedIps, that.fixedIps)
+ && Objects.equals(this.bindingHostId, that.bindingHostId)
+ && Objects.equals(this.bindingVifDetails,
+ that.bindingVifDetails)
+ && Objects.equals(this.bindingVifType, that.bindingVifType)
+ && Objects.equals(this.bindingVnicType,
+ that.bindingVnicType)
+ && Objects.equals(this.securityGroups, that.securityGroups);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return toStringHelper(this).add("id", id).add("network_id", networkId)
+ .add("adminStateUp", adminStateUp).add("state", state)
+ .add("name", name).add("state", state)
+ .add("macAddress", macAddress).add("tenantId", tenantId)
+ .add("deviced", deviceId).add("deviceOwner", deviceOwner)
+ .add("allowedAddressPairs", allowedAddressPairs)
+ .add("fixedIp", fixedIps).add("bindingHostId", bindingHostId)
+ .add("bindingVnicType", bindingVnicType)
+ .add("bindingVifDetails", bindingVifDetails)
+ .add("bindingVifType", bindingVifType)
+ .add("securityGroups", securityGroups).toString();
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/FixedIp.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/FixedIp.java
index dcfb72ac..c6569a7b 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/FixedIp.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/FixedIp.java
@@ -1,93 +1,93 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-import static com.google.common.base.MoreObjects.toStringHelper;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Objects;
-
-import org.onlab.packet.IpAddress;
-
-/**
- * Immutable representation of a IP address for the port, Include the IP address
- * and subnet identity.
- */
-public final class FixedIp {
- private final SubnetId subnetId;
- private final IpAddress ip;
- // Public construction is prohibited
- private FixedIp(SubnetId subnetId, IpAddress ip) {
- checkNotNull(subnetId, "SubnetId cannot be null");
- checkNotNull(ip, "IpAddress cannot be null");
- this.subnetId = subnetId;
- this.ip = ip;
- }
-
- /**
- * Returns the FixedIp subnet identifier.
- *
- * @return subnet identifier
- */
- public SubnetId subnetId() {
- return subnetId;
- }
-
- /**
- * Returns the FixedIp IP address.
- *
- * @return IP address
- */
- public IpAddress ip() {
- return ip;
- }
-
- /**
- * Creates a fixed ip using the supplied fixedIp.
- *
- * @param subnetId subnet identity
- * @param ip IP address
- * @return FixedIp
- */
- public static FixedIp fixedIp(SubnetId subnetId, IpAddress ip) {
- return new FixedIp(subnetId, ip);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(subnetId, ip);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof FixedIp) {
- final FixedIp that = (FixedIp) obj;
- return Objects.equals(this.subnetId, that.subnetId)
- && Objects.equals(this.ip, that.ip);
- }
- return false;
- }
-
- @Override
- public String toString() {
- return toStringHelper(this).add("subnetId", subnetId).add("ip", ip)
- .toString();
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Objects;
+
+import org.onlab.packet.IpAddress;
+
+/**
+ * Immutable representation of a IP address for the port, Include the IP address
+ * and subnet identity.
+ */
+public final class FixedIp {
+ private final SubnetId subnetId;
+ private final IpAddress ip;
+ // Public construction is prohibited
+ private FixedIp(SubnetId subnetId, IpAddress ip) {
+ checkNotNull(subnetId, "SubnetId cannot be null");
+ checkNotNull(ip, "IpAddress cannot be null");
+ this.subnetId = subnetId;
+ this.ip = ip;
+ }
+
+ /**
+ * Returns the FixedIp subnet identifier.
+ *
+ * @return subnet identifier
+ */
+ public SubnetId subnetId() {
+ return subnetId;
+ }
+
+ /**
+ * Returns the FixedIp IP address.
+ *
+ * @return IP address
+ */
+ public IpAddress ip() {
+ return ip;
+ }
+
+ /**
+ * Creates a fixed ip using the supplied fixedIp.
+ *
+ * @param subnetId subnet identity
+ * @param ip IP address
+ * @return FixedIp
+ */
+ public static FixedIp fixedIp(SubnetId subnetId, IpAddress ip) {
+ return new FixedIp(subnetId, ip);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(subnetId, ip);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof FixedIp) {
+ final FixedIp that = (FixedIp) obj;
+ return Objects.equals(this.subnetId, that.subnetId)
+ && Objects.equals(this.ip, that.ip);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return toStringHelper(this).add("subnetId", subnetId).add("ip", ip)
+ .toString();
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/HostRoute.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/HostRoute.java
index 74c28165..b18cb950 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/HostRoute.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/HostRoute.java
@@ -1,39 +1,39 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.IpPrefix;
-
-/**
- * Host route dictionaries for the subnet.
- */
-public interface HostRoute {
-
- /**
- * Returns the next hop address.
- *
- * @return next hop address
- */
- IpAddress nexthop();
-
- /**
- * Returns the destination address.
- *
- * @return destination address
- */
- IpPrefix destination();
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.IpPrefix;
+
+/**
+ * Host route dictionaries for the subnet.
+ */
+public interface HostRoute {
+
+ /**
+ * Returns the next hop address.
+ *
+ * @return next hop address
+ */
+ IpAddress nexthop();
+
+ /**
+ * Returns the destination address.
+ *
+ * @return destination address
+ */
+ IpPrefix destination();
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/PhysicalNetwork.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/PhysicalNetwork.java
index 6a0c5cb6..e96e666a 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/PhysicalNetwork.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/PhysicalNetwork.java
@@ -1,78 +1,78 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-import java.util.Objects;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Immutable representation of a physical network identity.
- */
-public final class PhysicalNetwork {
-
- private final String physicalNetwork;
-
- // Public construction is prohibited
- private PhysicalNetwork(String physicalNetwork) {
- checkNotNull(physicalNetwork, "PhysicalNetwork cannot be null");
- this.physicalNetwork = physicalNetwork;
- }
-
- /**
- * Creates a PhysicalNetwork object.
- *
- * @param physicalNetwork physical network
- * @return physical network
- */
- public static PhysicalNetwork physicalNetwork(String physicalNetwork) {
- return new PhysicalNetwork(physicalNetwork);
- }
-
- /**
- * Returns a physicalNetwork.
- *
- * @return physical network
- */
- public String physicalNetwork() {
- return physicalNetwork;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(physicalNetwork);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof PhysicalNetwork) {
- final PhysicalNetwork that = (PhysicalNetwork) obj;
- return this.getClass() == that.getClass()
- && Objects.equals(this.physicalNetwork,
- that.physicalNetwork);
- }
- return false;
- }
-
- @Override
- public String toString() {
- return physicalNetwork;
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import java.util.Objects;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Immutable representation of a physical network identity.
+ */
+public final class PhysicalNetwork {
+
+ private final String physicalNetwork;
+
+ // Public construction is prohibited
+ private PhysicalNetwork(String physicalNetwork) {
+ checkNotNull(physicalNetwork, "PhysicalNetwork cannot be null");
+ this.physicalNetwork = physicalNetwork;
+ }
+
+ /**
+ * Creates a PhysicalNetwork object.
+ *
+ * @param physicalNetwork physical network
+ * @return physical network
+ */
+ public static PhysicalNetwork physicalNetwork(String physicalNetwork) {
+ return new PhysicalNetwork(physicalNetwork);
+ }
+
+ /**
+ * Returns a physicalNetwork.
+ *
+ * @return physical network
+ */
+ public String physicalNetwork() {
+ return physicalNetwork;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(physicalNetwork);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof PhysicalNetwork) {
+ final PhysicalNetwork that = (PhysicalNetwork) obj;
+ return this.getClass() == that.getClass()
+ && Objects.equals(this.physicalNetwork,
+ that.physicalNetwork);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return physicalNetwork;
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/SecurityGroup.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/SecurityGroup.java
index 7f098064..9ec1dc63 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/SecurityGroup.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/SecurityGroup.java
@@ -1,77 +1,77 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-import java.util.Objects;
-
-import static com.google.common.base.MoreObjects.toStringHelper;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Immutable representation of a security group.
- */
-public final class SecurityGroup {
- private final String securityGroup;
-
- /**
- * Returns the securityGroup.
- *
- * @return securityGroup
- */
- public String securityGroup() {
- return securityGroup;
- }
- // Public construction is prohibited
- private SecurityGroup(String securityGroup) {
- checkNotNull(securityGroup, "SecurityGroup cannot be null");
- this.securityGroup = securityGroup;
- }
-
- /**
- * Creates a securityGroup using the supplied securityGroup.
- *
- * @param securityGroup security group
- * @return securityGroup
- */
- public static SecurityGroup securityGroup(String securityGroup) {
- return new SecurityGroup(securityGroup);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(securityGroup);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof SecurityGroup) {
- final SecurityGroup that = (SecurityGroup) obj;
- return this.getClass() == that.getClass()
- && Objects.equals(this.securityGroup, that.securityGroup);
- }
- return false;
- }
-
- @Override
- public String toString() {
- return toStringHelper(this).add("securityGroup", securityGroup)
- .toString();
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Immutable representation of a security group.
+ */
+public final class SecurityGroup {
+ private final String securityGroup;
+
+ /**
+ * Returns the securityGroup.
+ *
+ * @return securityGroup
+ */
+ public String securityGroup() {
+ return securityGroup;
+ }
+ // Public construction is prohibited
+ private SecurityGroup(String securityGroup) {
+ checkNotNull(securityGroup, "SecurityGroup cannot be null");
+ this.securityGroup = securityGroup;
+ }
+
+ /**
+ * Creates a securityGroup using the supplied securityGroup.
+ *
+ * @param securityGroup security group
+ * @return securityGroup
+ */
+ public static SecurityGroup securityGroup(String securityGroup) {
+ return new SecurityGroup(securityGroup);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(securityGroup);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof SecurityGroup) {
+ final SecurityGroup that = (SecurityGroup) obj;
+ return this.getClass() == that.getClass()
+ && Objects.equals(this.securityGroup, that.securityGroup);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return toStringHelper(this).add("securityGroup", securityGroup)
+ .toString();
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/SegmentationId.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/SegmentationId.java
index 69f9dce7..a076265f 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/SegmentationId.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/SegmentationId.java
@@ -1,77 +1,77 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-import java.util.Objects;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Immutable representation of a Segmentation identifier.
- */
-public final class SegmentationId {
-
- private final String segmentationId;
-
- // Public construction is prohibited
- private SegmentationId(String segmentationId) {
- checkNotNull(segmentationId, "SegmentationId cannot be null");
- this.segmentationId = segmentationId;
- }
-
- /**
- * Creates a SegmentationId object.
- *
- * @param segmentationId segmentation identifier
- * @return SegmentationId
- */
- public static SegmentationId segmentationId(String segmentationId) {
- return new SegmentationId(segmentationId);
- }
-
- /**
- * Returns the segmentation identifier.
- *
- * @return segmentationId
- */
- public String segmentationId() {
- return segmentationId;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(segmentationId);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof SegmentationId) {
- final SegmentationId that = (SegmentationId) obj;
- return this.getClass() == that.getClass()
- && Objects.equals(this.segmentationId, that.segmentationId);
- }
- return false;
- }
-
- @Override
- public String toString() {
- return segmentationId;
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import java.util.Objects;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Immutable representation of a Segmentation identifier.
+ */
+public final class SegmentationId {
+
+ private final String segmentationId;
+
+ // Public construction is prohibited
+ private SegmentationId(String segmentationId) {
+ checkNotNull(segmentationId, "SegmentationId cannot be null");
+ this.segmentationId = segmentationId;
+ }
+
+ /**
+ * Creates a SegmentationId object.
+ *
+ * @param segmentationId segmentation identifier
+ * @return SegmentationId
+ */
+ public static SegmentationId segmentationId(String segmentationId) {
+ return new SegmentationId(segmentationId);
+ }
+
+ /**
+ * Returns the segmentation identifier.
+ *
+ * @return segmentationId
+ */
+ public String segmentationId() {
+ return segmentationId;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(segmentationId);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof SegmentationId) {
+ final SegmentationId that = (SegmentationId) obj;
+ return this.getClass() == that.getClass()
+ && Objects.equals(this.segmentationId, that.segmentationId);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return segmentationId;
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/Subnet.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/Subnet.java
index 1104d7ee..f563a78f 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/Subnet.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/Subnet.java
@@ -1,129 +1,129 @@
-/*
- *Copyright 2015 Open Networking Laboratory
- *
- *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.onosproject.vtnrsc;
-
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.IpAddress.Version;
-import org.onlab.packet.IpPrefix;
-
-/**
- * Representation of a subnet.
- */
-public interface Subnet {
-
- /**
- * Coarse classification of the type of the ipV6Mode.
- */
- public enum Mode {
- DHCPV6_STATEFUL, DHCPV6_STATELESS, SLAAC
- }
-
- /**
- * Returns the subnet identifier.
- *
- * @return identifier
- */
- SubnetId id();
-
- /**
- * Returns the name of the subnet.
- *
- * @return subnetName
- */
- String subnetName();
-
- /**
- * Returns the network identifier.
- *
- * @return the network identifier
- */
- TenantNetworkId networkId();
-
- /**
- * Returns tenant identifier.
- *
- * @return the tenant identifier
- */
- TenantId tenantId();
-
- /**
- * Returns the IP version, which is 4 or 6.
- *
- * @return ipVersion
- */
- Version ipVersion();
-
- /**
- * Returns the cidr.
- *
- * @return cidr
- */
- IpPrefix cidr();
-
- /**
- * Returns the gateway IP address.
- *
- * @return gatewayIp
- */
- IpAddress gatewayIp();
-
- /**
- * Returns true if DHCP is enabled and return false if DHCP is disabled.
- *
- * @return true or false
- */
- boolean dhcpEnabled();
-
- /**
- * Indicates whether this tenantNetwork is shared across all tenants. By
- * default, only administrative user can change this value.
- *
- * @return true or false
- */
- boolean shared();
-
- /**
- * Returns a collection of hostRoutes.
- *
- * @return a collection of hostRoutes
- */
- Iterable<HostRoute> hostRoutes();
-
- /**
- * Returns the ipV6AddressMode. A valid value is dhcpv6-stateful,
- * dhcpv6-stateless, or slaac.
- *
- * @return ipV6AddressMode whose value is dhcpv6-stateful, dhcpv6-stateless
- * or slaac
- */
- Mode ipV6AddressMode();
-
- /**
- * Returns the ipV6RaMode.A valid value is dhcpv6-stateful,
- * dhcpv6-stateless, or slaac.
- *
- * @return ipV6RaMode whose value is dhcpv6-stateful, dhcpv6-stateless or
- * slaac
- */
- Mode ipV6RaMode();
-
- /**
- * Returns a collection of allocation_pools.
- *
- * @return a collection of allocationPools
- */
- Iterable<AllocationPool> allocationPools();
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.IpAddress.Version;
+import org.onlab.packet.IpPrefix;
+
+/**
+ * Representation of a subnet.
+ */
+public interface Subnet {
+
+ /**
+ * Coarse classification of the type of the ipV6Mode.
+ */
+ enum Mode {
+ DHCPV6_STATEFUL, DHCPV6_STATELESS, SLAAC
+ }
+
+ /**
+ * Returns the subnet identifier.
+ *
+ * @return identifier
+ */
+ SubnetId id();
+
+ /**
+ * Returns the name of the subnet.
+ *
+ * @return subnetName
+ */
+ String subnetName();
+
+ /**
+ * Returns the network identifier.
+ *
+ * @return the network identifier
+ */
+ TenantNetworkId networkId();
+
+ /**
+ * Returns tenant identifier.
+ *
+ * @return the tenant identifier
+ */
+ TenantId tenantId();
+
+ /**
+ * Returns the IP version, which is 4 or 6.
+ *
+ * @return ipVersion
+ */
+ Version ipVersion();
+
+ /**
+ * Returns the cidr.
+ *
+ * @return cidr
+ */
+ IpPrefix cidr();
+
+ /**
+ * Returns the gateway IP address.
+ *
+ * @return gatewayIp
+ */
+ IpAddress gatewayIp();
+
+ /**
+ * Returns true if DHCP is enabled and return false if DHCP is disabled.
+ *
+ * @return true or false
+ */
+ boolean dhcpEnabled();
+
+ /**
+ * Indicates whether this tenantNetwork is shared across all tenants. By
+ * default, only administrative user can change this value.
+ *
+ * @return true or false
+ */
+ boolean shared();
+
+ /**
+ * Returns a collection of hostRoutes.
+ *
+ * @return a collection of hostRoutes
+ */
+ Iterable<HostRoute> hostRoutes();
+
+ /**
+ * Returns the ipV6AddressMode. A valid value is dhcpv6-stateful,
+ * dhcpv6-stateless, or slaac.
+ *
+ * @return ipV6AddressMode whose value is dhcpv6-stateful, dhcpv6-stateless
+ * or slaac
+ */
+ Mode ipV6AddressMode();
+
+ /**
+ * Returns the ipV6RaMode.A valid value is dhcpv6-stateful,
+ * dhcpv6-stateless, or slaac.
+ *
+ * @return ipV6RaMode whose value is dhcpv6-stateful, dhcpv6-stateless or
+ * slaac
+ */
+ Mode ipV6RaMode();
+
+ /**
+ * Returns a collection of allocation_pools.
+ *
+ * @return a collection of allocationPools
+ */
+ Iterable<AllocationPool> allocationPools();
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/SubnetId.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/SubnetId.java
index e0c1aee9..4bcc3329 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/SubnetId.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/SubnetId.java
@@ -1,76 +1,76 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Objects;
-
-/**
- * Immutable representation of a subnet identifier.
- */
-public final class SubnetId {
-
- private final String subnetId;
-
- // Public construction is prohibited
- private SubnetId(String subnetId) {
- checkNotNull(subnetId, "SubnetId cannot be null");
- this.subnetId = subnetId;
- }
-
- /**
- * Creates a Subnet identifier.
- *
- * @param subnetId the subnet identifier
- * @return the subnet identifier
- */
- public static SubnetId subnetId(String subnetId) {
- return new SubnetId(subnetId);
- }
-
- /**
- * Returns the subnet identifier.
- *
- * @return the subnet identifier
- */
- public String subnetId() {
- return subnetId;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(subnetId);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof SubnetId) {
- final SubnetId that = (SubnetId) obj;
- return this.getClass() == that.getClass()
- && Objects.equals(this.subnetId, that.subnetId);
- }
- return false;
- }
-
- @Override
- public String toString() {
- return subnetId;
- }
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Objects;
+
+/**
+ * Immutable representation of a subnet identifier.
+ */
+public final class SubnetId {
+
+ private final String subnetId;
+
+ // Public construction is prohibited
+ private SubnetId(String subnetId) {
+ checkNotNull(subnetId, "SubnetId cannot be null");
+ this.subnetId = subnetId;
+ }
+
+ /**
+ * Creates a Subnet identifier.
+ *
+ * @param subnetId the subnet identifier
+ * @return the subnet identifier
+ */
+ public static SubnetId subnetId(String subnetId) {
+ return new SubnetId(subnetId);
+ }
+
+ /**
+ * Returns the subnet identifier.
+ *
+ * @return the subnet identifier
+ */
+ public String subnetId() {
+ return subnetId;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(subnetId);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof SubnetId) {
+ final SubnetId that = (SubnetId) obj;
+ return this.getClass() == that.getClass()
+ && Objects.equals(this.subnetId, that.subnetId);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return subnetId;
+ }
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/TenantId.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/TenantId.java
index 9d44c469..c4d99e49 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/TenantId.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/TenantId.java
@@ -1,77 +1,77 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-import java.util.Objects;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Immutable representation of a tenant identifier.
- */
-public final class TenantId {
-
- private final String tenantId;
-
- // Public construction is prohibited
- private TenantId(String tenantId) {
- this.tenantId = tenantId;
- }
-
- /**
- * Creates a network id using the tenantid.
- *
- * @param tenantid network String
- * @return TenantId
- */
- public static TenantId tenantId(String tenantid) {
- checkNotNull(tenantid, "Tenantid can not be null");
- return new TenantId(tenantid);
- }
-
- /**
- * Returns the tenant identifier.
- *
- * @return the tenant identifier
- */
- public String tenantId() {
- return tenantId;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(tenantId);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof TenantId) {
- final TenantId that = (TenantId) obj;
- return this.getClass() == that.getClass()
- && Objects.equals(this.tenantId, that.tenantId);
- }
- return false;
- }
-
- @Override
- public String toString() {
- return tenantId;
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import java.util.Objects;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Immutable representation of a tenant identifier.
+ */
+public final class TenantId {
+
+ private final String tenantId;
+
+ // Public construction is prohibited
+ private TenantId(String tenantId) {
+ this.tenantId = tenantId;
+ }
+
+ /**
+ * Creates a network id using the tenantid.
+ *
+ * @param tenantid network String
+ * @return TenantId
+ */
+ public static TenantId tenantId(String tenantid) {
+ checkNotNull(tenantid, "Tenantid can not be null");
+ return new TenantId(tenantid);
+ }
+
+ /**
+ * Returns the tenant identifier.
+ *
+ * @return the tenant identifier
+ */
+ public String tenantId() {
+ return tenantId;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(tenantId);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof TenantId) {
+ final TenantId that = (TenantId) obj;
+ return this.getClass() == that.getClass()
+ && Objects.equals(this.tenantId, that.tenantId);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return tenantId;
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/TenantNetwork.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/TenantNetwork.java
index d9238f92..256352f4 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/TenantNetwork.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/TenantNetwork.java
@@ -1,130 +1,130 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-/**
- * Representation of the tenantNetwork.
- */
-public interface TenantNetwork {
-
- /**
- * Coarse classification of the state of the tenantNetwork.
- */
- public enum State {
- /**
- * Signifies that a tenantNetwork is currently active.This state means
- * that this network is available.
- */
- ACTIVE,
- /**
- * Signifies that a tenantNetwork is currently built.
- */
- BUILD,
- /**
- * Signifies that a tenantNetwork is currently unavailable.
- */
- DOWN,
- /**
- * Signifies that a tenantNetwork is currently error.
- */
- ERROR
- }
-
- /**
- * Coarse classification of the type of the tenantNetwork.
- */
- public enum Type {
- /**
- * Signifies that a tenantNetwork is local.
- */
- LOCAL
- }
-
- /**
- * Returns the tenantNetwork identifier.
- *
- * @return tenantNetwork identifier
- */
- TenantNetworkId id();
-
- /**
- * Returns the tenantNetwork name.
- *
- * @return tenantNetwork name
- */
- String name();
-
- /**
- * Returns the administrative state of the tenantNetwork,which is up(true)
- * or down(false).
- *
- * @return true or false
- */
- boolean adminStateUp();
-
- /**
- * Returns the tenantNetwork state.
- *
- * @return tenant network state
- */
- State state();
-
- /**
- * Indicates whether this tenantNetwork is shared across all tenants. By
- * default,only administrative user can change this value.
- *
- * @return true or false
- */
- boolean shared();
-
- /**
- * Returns the UUID of the tenant that will own the tenantNetwork. This
- * tenant can be different from the tenant that makes the create
- * tenantNetwork request.
- *
- * @return the tenant identifier
- */
- TenantId tenantId();
-
- /**
- * Returns the routerExternal.Indicates whether this network is externally
- * accessible.
- *
- * @return true or false
- */
- boolean routerExternal();
-
- /**
- * Returns the tenantNetwork Type.
- *
- * @return tenantNetwork Type
- */
- Type type();
-
- /**
- * Returns the tenantNetwork physical network.
- *
- * @return tenantNetwork physical network
- */
- PhysicalNetwork physicalNetwork();
-
- /**
- * Returns the tenantNetwork segmentation id.
- *
- * @return tenantNetwork segmentation id
- */
- SegmentationId segmentationId();
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+/**
+ * Representation of the tenantNetwork.
+ */
+public interface TenantNetwork {
+
+ /**
+ * Coarse classification of the state of the tenantNetwork.
+ */
+ enum State {
+ /**
+ * Signifies that a tenantNetwork is currently active.This state means
+ * that this network is available.
+ */
+ ACTIVE,
+ /**
+ * Signifies that a tenantNetwork is currently built.
+ */
+ BUILD,
+ /**
+ * Signifies that a tenantNetwork is currently unavailable.
+ */
+ DOWN,
+ /**
+ * Signifies that a tenantNetwork is currently error.
+ */
+ ERROR
+ }
+
+ /**
+ * Coarse classification of the type of the tenantNetwork.
+ */
+ enum Type {
+ /**
+ * Signifies that a tenantNetwork is local.
+ */
+ LOCAL
+ }
+
+ /**
+ * Returns the tenantNetwork identifier.
+ *
+ * @return tenantNetwork identifier
+ */
+ TenantNetworkId id();
+
+ /**
+ * Returns the tenantNetwork name.
+ *
+ * @return tenantNetwork name
+ */
+ String name();
+
+ /**
+ * Returns the administrative state of the tenantNetwork,which is up(true)
+ * or down(false).
+ *
+ * @return true or false
+ */
+ boolean adminStateUp();
+
+ /**
+ * Returns the tenantNetwork state.
+ *
+ * @return tenant network state
+ */
+ State state();
+
+ /**
+ * Indicates whether this tenantNetwork is shared across all tenants. By
+ * default,only administrative user can change this value.
+ *
+ * @return true or false
+ */
+ boolean shared();
+
+ /**
+ * Returns the UUID of the tenant that will own the tenantNetwork. This
+ * tenant can be different from the tenant that makes the create
+ * tenantNetwork request.
+ *
+ * @return the tenant identifier
+ */
+ TenantId tenantId();
+
+ /**
+ * Returns the routerExternal.Indicates whether this network is externally
+ * accessible.
+ *
+ * @return true or false
+ */
+ boolean routerExternal();
+
+ /**
+ * Returns the tenantNetwork Type.
+ *
+ * @return tenantNetwork Type
+ */
+ Type type();
+
+ /**
+ * Returns the tenantNetwork physical network.
+ *
+ * @return tenantNetwork physical network
+ */
+ PhysicalNetwork physicalNetwork();
+
+ /**
+ * Returns the tenantNetwork segmentation id.
+ *
+ * @return tenantNetwork segmentation id
+ */
+ SegmentationId segmentationId();
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/TenantNetworkId.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/TenantNetworkId.java
index 81c9962f..fbb9e480 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/TenantNetworkId.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/TenantNetworkId.java
@@ -1,76 +1,76 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-import java.util.Objects;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Immutable representation of a tenantNetwork identity.
- */
-public final class TenantNetworkId {
-
- private final String networkId;
-
- // Public construction is prohibited
- private TenantNetworkId(String networkId) {
- this.networkId = networkId;
- }
-
- /**
- * Creates a TenantNetwork identifier.
- *
- * @param networkId tenantNetwork identify string
- * @return the attached tenantNetwork identifier
- */
- public static TenantNetworkId networkId(String networkId) {
- checkNotNull(networkId, "Networkid cannot be null");
- return new TenantNetworkId(networkId);
- }
-
- /**
- * Returns tenantNetwork identifier.
- *
- * @return the tenantNetwork identifier
- */
- public String networkId() {
- return networkId;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(networkId);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof TenantNetworkId) {
- final TenantNetworkId that = (TenantNetworkId) obj;
- return this.getClass() == that.getClass()
- && Objects.equals(this.networkId, that.networkId);
- }
- return false;
- }
-
- @Override
- public String toString() {
- return networkId;
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import java.util.Objects;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Immutable representation of a tenantNetwork identity.
+ */
+public final class TenantNetworkId {
+
+ private final String networkId;
+
+ // Public construction is prohibited
+ private TenantNetworkId(String networkId) {
+ this.networkId = networkId;
+ }
+
+ /**
+ * Creates a TenantNetwork identifier.
+ *
+ * @param networkId tenantNetwork identify string
+ * @return the attached tenantNetwork identifier
+ */
+ public static TenantNetworkId networkId(String networkId) {
+ checkNotNull(networkId, "Networkid cannot be null");
+ return new TenantNetworkId(networkId);
+ }
+
+ /**
+ * Returns tenantNetwork identifier.
+ *
+ * @return the tenantNetwork identifier
+ */
+ public String networkId() {
+ return networkId;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(networkId);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof TenantNetworkId) {
+ final TenantNetworkId that = (TenantNetworkId) obj;
+ return this.getClass() == that.getClass()
+ && Objects.equals(this.networkId, that.networkId);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return networkId;
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/VirtualPort.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/VirtualPort.java
index a6071094..d2d7c146 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/VirtualPort.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/VirtualPort.java
@@ -1,156 +1,156 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-import java.util.Collection;
-import java.util.Set;
-
-import org.onlab.packet.MacAddress;
-import org.onosproject.net.DeviceId;
-
-/**
- * Representation of the VirtualPort.
- */
-public interface VirtualPort {
- /**
- * Coarse classification of the type of the virtual port.
- */
- public enum State {
- /**
- * Signifies that a virtualPort is currently active,This state mean that
- * this virtualPort is available.
- */
- ACTIVE,
- /**
- * Signifies that a virtualPort is currently unavailable.
- */
- DOWN;
- }
-
- /**
- * Returns the virtualPort identifier.
- *
- * @return virtualPort identifier
- */
- VirtualPortId portId();
-
- /**
- * Returns the network identifier.
- *
- * @return tenantNetwork identifier
- */
- TenantNetworkId networkId();
-
- /**
- * Returns the symbolic name for the virtualPort.
- *
- * @return virtualPort name
- */
- String name();
-
- /**
- * Returns the administrative status of the port,which is up(true) or
- * down(false).
- *
- * @return true if the administrative status of the port is up
- */
- boolean adminStateUp();
-
- /**
- * Returns the state.
- *
- * @return state
- */
- State state();
-
- /**
- * Returns the MAC address.
- *
- * @return MAC Address
- */
- MacAddress macAddress();
-
- /**
- * Returns the port tenantId.
- *
- * @return port tenantId
- */
- TenantId tenantId();
-
- /**
- * Returns the device identifier.
- *
- * @return deviceId
- */
- DeviceId deviceId();
-
- /**
- * Returns the identifier of the entity that uses this port.
- *
- * @return deviceOwner
- */
- String deviceOwner();
-
- /**
- * Returns the virtualPort allowedAddressPairs.
- *
- * @return virtualPort allowedAddressPairs
- */
- Collection<AllowedAddressPair> allowedAddressPairs();
-
- /**
- * Returns set of IP addresses for the port, include the IP addresses and subnet
- * identity.
- *
- * @return FixedIps Set of fixedIp
- */
- Set<FixedIp> fixedIps();
-
- /**
- * Returns the virtualPort bindinghostId.
- *
- * @return virtualPort bindinghostId
- */
- BindingHostId bindingHostId();
-
- /**
- * Returns the virtualPort bindingVnicType.
- *
- * @return virtualPort bindingVnicType
- */
- String bindingVnicType();
-
- /**
- * Returns the virtualPort bindingVifType.
- *
- * @return virtualPort bindingVifType
- */
- String bindingVifType();
-
- /**
- * Returns the virtualPort bindingvifDetail.
- *
- * @return virtualPort bindingvifDetail
- */
- String bindingVifDetails();
-
- /**
- * Returns the security groups.
- *
- * @return port security groups
- */
- Iterable<SecurityGroup> securityGroups();
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import java.util.Collection;
+import java.util.Set;
+
+import org.onlab.packet.MacAddress;
+import org.onosproject.net.DeviceId;
+
+/**
+ * Representation of the VirtualPort.
+ */
+public interface VirtualPort {
+ /**
+ * Coarse classification of the type of the virtual port.
+ */
+ enum State {
+ /**
+ * Signifies that a virtualPort is currently active,This state mean that
+ * this virtualPort is available.
+ */
+ ACTIVE,
+ /**
+ * Signifies that a virtualPort is currently unavailable.
+ */
+ DOWN;
+ }
+
+ /**
+ * Returns the virtualPort identifier.
+ *
+ * @return virtualPort identifier
+ */
+ VirtualPortId portId();
+
+ /**
+ * Returns the network identifier.
+ *
+ * @return tenantNetwork identifier
+ */
+ TenantNetworkId networkId();
+
+ /**
+ * Returns the symbolic name for the virtualPort.
+ *
+ * @return virtualPort name
+ */
+ String name();
+
+ /**
+ * Returns the administrative status of the port,which is up(true) or
+ * down(false).
+ *
+ * @return true if the administrative status of the port is up
+ */
+ boolean adminStateUp();
+
+ /**
+ * Returns the state.
+ *
+ * @return state
+ */
+ State state();
+
+ /**
+ * Returns the MAC address.
+ *
+ * @return MAC Address
+ */
+ MacAddress macAddress();
+
+ /**
+ * Returns the port tenantId.
+ *
+ * @return port tenantId
+ */
+ TenantId tenantId();
+
+ /**
+ * Returns the device identifier.
+ *
+ * @return deviceId
+ */
+ DeviceId deviceId();
+
+ /**
+ * Returns the identifier of the entity that uses this port.
+ *
+ * @return deviceOwner
+ */
+ String deviceOwner();
+
+ /**
+ * Returns the virtualPort allowedAddressPairs.
+ *
+ * @return virtualPort allowedAddressPairs
+ */
+ Collection<AllowedAddressPair> allowedAddressPairs();
+
+ /**
+ * Returns set of IP addresses for the port, include the IP addresses and subnet
+ * identity.
+ *
+ * @return FixedIps Set of fixedIp
+ */
+ Set<FixedIp> fixedIps();
+
+ /**
+ * Returns the virtualPort bindinghostId.
+ *
+ * @return virtualPort bindinghostId
+ */
+ BindingHostId bindingHostId();
+
+ /**
+ * Returns the virtualPort bindingVnicType.
+ *
+ * @return virtualPort bindingVnicType
+ */
+ String bindingVnicType();
+
+ /**
+ * Returns the virtualPort bindingVifType.
+ *
+ * @return virtualPort bindingVifType
+ */
+ String bindingVifType();
+
+ /**
+ * Returns the virtualPort bindingvifDetail.
+ *
+ * @return virtualPort bindingvifDetail
+ */
+ String bindingVifDetails();
+
+ /**
+ * Returns the security groups.
+ *
+ * @return port security groups
+ */
+ Iterable<SecurityGroup> securityGroups();
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/VirtualPortId.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/VirtualPortId.java
index 0969ce10..3038bdff 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/VirtualPortId.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/VirtualPortId.java
@@ -1,70 +1,70 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Objects;
-
-/**
- * Immutable representation of a virtual port identifier.
- */
-public final class VirtualPortId {
- private final String portId;
- // Public construction is prohibited
- private VirtualPortId(String virtualPortId) {
- checkNotNull(virtualPortId, "VirtualPortId cannot be null");
- this.portId = virtualPortId;
- }
-
- public String portId() {
- return portId;
- }
-
- /**
- * Creates a virtualPort id using the supplied portId.
- *
- * @param portId virtualport identifier
- * @return VirtualPortId
- */
- public static VirtualPortId portId(String portId) {
- return new VirtualPortId(portId);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(portId);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof VirtualPortId) {
- final VirtualPortId that = (VirtualPortId) obj;
- return this.getClass() == that.getClass()
- && Objects.equals(this.portId, that.portId);
- }
- return false;
- }
-
- @Override
- public String toString() {
- return portId;
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Objects;
+
+/**
+ * Immutable representation of a virtual port identifier.
+ */
+public final class VirtualPortId {
+ private final String portId;
+ // Public construction is prohibited
+ private VirtualPortId(String virtualPortId) {
+ checkNotNull(virtualPortId, "VirtualPortId cannot be null");
+ this.portId = virtualPortId;
+ }
+
+ public String portId() {
+ return portId;
+ }
+
+ /**
+ * Creates a virtualPort id using the supplied portId.
+ *
+ * @param portId virtualport identifier
+ * @return VirtualPortId
+ */
+ public static VirtualPortId portId(String portId) {
+ return new VirtualPortId(portId);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(portId);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof VirtualPortId) {
+ final VirtualPortId that = (VirtualPortId) obj;
+ return this.getClass() == that.getClass()
+ && Objects.equals(this.portId, that.portId);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return portId;
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/network/package-info.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/network/package-info.java
new file mode 100644
index 00000000..1622c800
--- /dev/null
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/network/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Command line interface for tenant networks.
+ */
+package org.onosproject.vtnrsc.cli.network;
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/SubnetUpdateCommand.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/SubnetUpdateCommand.java
index f8ee6b97..b0578a1e 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/SubnetUpdateCommand.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/SubnetUpdateCommand.java
@@ -92,7 +92,7 @@ public class SubnetUpdateCommand extends AbstractShellCommand {
@Option(name = "-a", aliases = "--allocationPools",
description = "Subnet jsonnode allocationPools", required = false, multiValued = false)
- Set<AllocationPool> allocationPools = Sets.newHashSet();;
+ Set<AllocationPool> allocationPools = Sets.newHashSet();
@Override
protected void execute() {
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/package-info.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/package-info.java
new file mode 100644
index 00000000..b3a2ff51
--- /dev/null
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/subnet/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Command line interface for subnets.
+ */
+package org.onosproject.vtnrsc.cli.subnet;
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/virtualport/package-info.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/virtualport/package-info.java
new file mode 100644
index 00000000..fac214a1
--- /dev/null
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/cli/virtualport/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Command line interface for virtual ports.
+ */
+package org.onosproject.vtnrsc.cli.virtualport;
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/SubnetService.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/SubnetService.java
index 71ea9ba3..82eb9611 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/SubnetService.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/SubnetService.java
@@ -1,72 +1,72 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc.subnet;
-
-import org.onosproject.vtnrsc.Subnet;
-import org.onosproject.vtnrsc.SubnetId;
-
-
-/**
- * Service for interacting with the inventory of subnets.
- */
-public interface SubnetService {
- /**
- * Returns the subnet with the specified identifier.
- *
- * @param subnetId subnet identifier
- * @return true or false
- */
- boolean exists(SubnetId subnetId);
- /**
- * Returns a collection of the currently known subnets.
- *
- * @return iterable collection of subnets
- */
- Iterable<Subnet> getSubnets();
-
- /**
- * Returns the subnet with the specified identifier.
- *
- * @param subnetId subnet identifier
- * @return subnet or null if one with the given identifier is not known
- */
- Subnet getSubnet(SubnetId subnetId);
- /**
- * Creates new subnets.
- *
- * @param subnets the iterable collection of subnets
- * @return true if the identifier subnet has been created right
- */
- boolean createSubnets(Iterable<Subnet> subnets);
-
- /**
- * Updates existing subnets.
- *
- * @param subnets the iterable collection of subnets
- * @return true if all subnets were updated successfully
- */
- boolean updateSubnets(Iterable<Subnet> subnets);
-
- /**
- * Administratively removes the specified subnets from the store.
- *
- * @param subnetIds the iterable collection of subnets identifier
- * @return true if remove identifier subnets successfully
- */
- boolean removeSubnets(Iterable<SubnetId> subnetIds);
-
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc.subnet;
+
+import org.onosproject.vtnrsc.Subnet;
+import org.onosproject.vtnrsc.SubnetId;
+
+
+/**
+ * Service for interacting with the inventory of subnets.
+ */
+public interface SubnetService {
+ /**
+ * Returns the subnet with the specified identifier.
+ *
+ * @param subnetId subnet identifier
+ * @return true or false
+ */
+ boolean exists(SubnetId subnetId);
+ /**
+ * Returns a collection of the currently known subnets.
+ *
+ * @return iterable collection of subnets
+ */
+ Iterable<Subnet> getSubnets();
+
+ /**
+ * Returns the subnet with the specified identifier.
+ *
+ * @param subnetId subnet identifier
+ * @return subnet or null if one with the given identifier is not known
+ */
+ Subnet getSubnet(SubnetId subnetId);
+ /**
+ * Creates new subnets.
+ *
+ * @param subnets the iterable collection of subnets
+ * @return true if the identifier subnet has been created right
+ */
+ boolean createSubnets(Iterable<Subnet> subnets);
+
+ /**
+ * Updates existing subnets.
+ *
+ * @param subnets the iterable collection of subnets
+ * @return true if all subnets were updated successfully
+ */
+ boolean updateSubnets(Iterable<Subnet> subnets);
+
+ /**
+ * Administratively removes the specified subnets from the store.
+ *
+ * @param subnetIds the iterable collection of subnets identifier
+ * @return true if remove identifier subnets successfully
+ */
+ boolean removeSubnets(Iterable<SubnetId> subnetIds);
+
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/impl/SubnetManager.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/impl/SubnetManager.java
index ab810a80..890beb29 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/impl/SubnetManager.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/impl/SubnetManager.java
@@ -1,179 +1,183 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc.subnet.impl;
-
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.Service;
-import org.onlab.packet.IpAddress;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.core.CoreService;
-import org.onosproject.store.serializers.KryoNamespaces;
-import org.onosproject.store.service.Serializer;
-import org.onosproject.store.service.StorageService;
-import org.onosproject.vtnrsc.AllocationPool;
-import org.onosproject.vtnrsc.DefaultSubnet;
-import org.onosproject.vtnrsc.HostRoute;
-import org.onosproject.vtnrsc.Subnet;
-import org.onosproject.vtnrsc.SubnetId;
-import org.onosproject.vtnrsc.TenantId;
-import org.onosproject.vtnrsc.TenantNetworkId;
-import org.onosproject.vtnrsc.subnet.SubnetService;
-import org.onosproject.vtnrsc.tenantnetwork.TenantNetworkService;
-import org.slf4j.Logger;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Map;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Provides implementation of the Subnet service.
- */
-@Component(immediate = true)
-@Service
-public class SubnetManager implements SubnetService {
-
- private static final String SUBNET_ID_NULL = "Subnet ID cannot be null";
- private static final String SUBNET_NOT_NULL = "Subnet cannot be null";
- private static final String SUBNET = "vtn-subnet-store";
- private static final String VTNRSC_APP = "org.onosproject.vtnrsc";
-
-
- private final Logger log = getLogger(getClass());
-
- protected Map<SubnetId, Subnet> subnetStore;
- protected ApplicationId appId;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected StorageService storageService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected CoreService coreService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected TenantNetworkService tenantNetworkService;
-
- @Activate
- public void activate() {
-
- appId = coreService.registerApplication(VTNRSC_APP);
-
- subnetStore = storageService.<SubnetId, Subnet>consistentMapBuilder()
- .withName(SUBNET)
- .withApplicationId(appId)
- .withPurgeOnUninstall()
- .withSerializer(Serializer.using(Arrays.asList(KryoNamespaces.API),
- Subnet.class,
- SubnetId.class,
- TenantNetworkId.class,
- TenantId.class,
- HostRoute.class,
- Subnet.Mode.class,
- AllocationPool.class,
- DefaultSubnet.class,
- IpAddress.Version.class))
- .build().asJavaMap();
-
- log.info("Started");
- }
-
- @Deactivate
- public void deactivate() {
- log.info("Stopped");
- }
-
- @Override
- public Iterable<Subnet> getSubnets() {
- return Collections.unmodifiableCollection(subnetStore.values());
- }
-
- @Override
- public Subnet getSubnet(SubnetId subnetId) {
- checkNotNull(subnetId, SUBNET_ID_NULL);
- return subnetStore.get(subnetId);
- }
-
- @Override
- public boolean exists(SubnetId subnetId) {
- checkNotNull(subnetId, SUBNET_ID_NULL);
- return subnetStore.containsKey(subnetId);
- }
-
- @Override
- public boolean createSubnets(Iterable<Subnet> subnets) {
- checkNotNull(subnets, SUBNET_NOT_NULL);
- for (Subnet subnet : subnets) {
- if (!tenantNetworkService.exists(subnet.networkId())) {
- log.debug("The network identifier that the subnet {} belong to is not exist",
- subnet.networkId().toString(), subnet.id().toString());
- return false;
- }
- subnetStore.put(subnet.id(), subnet);
- if (!subnetStore.containsKey(subnet.id())) {
- log.debug("The identified subnet whose identifier is {} create failed",
- subnet.id().toString());
- return false;
- }
- }
- return true;
- }
-
- @Override
- public boolean updateSubnets(Iterable<Subnet> subnets) {
- checkNotNull(subnets, SUBNET_NOT_NULL);
- if (subnets != null) {
- for (Subnet subnet : subnets) {
- if (!subnetStore.containsKey(subnet.id())) {
- log.debug("The subnet is not exist whose identifier is {}",
- subnet.id().toString());
- return false;
- }
-
- subnetStore.put(subnet.id(), subnet);
-
- if (!subnet.equals(subnetStore.get(subnet.id()))) {
- log.debug("The subnet is updated failed whose identifier is {}",
- subnet.id().toString());
- return false;
- }
- }
- }
- return true;
- }
-
- @Override
- public boolean removeSubnets(Iterable<SubnetId> subnetIds) {
- checkNotNull(subnetIds, SUBNET_ID_NULL);
- if (subnetIds != null) {
- for (SubnetId subnetId : subnetIds) {
- subnetStore.remove(subnetId);
- if (subnetStore.containsKey(subnetId)) {
- log.debug("The subnet created is failed whose identifier is {}",
- subnetId.toString());
- return false;
- }
- }
- }
- return true;
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc.subnet.impl;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.Service;
+import org.onlab.packet.IpAddress;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.core.CoreService;
+import org.onosproject.store.serializers.KryoNamespaces;
+import org.onosproject.store.service.Serializer;
+import org.onosproject.store.service.StorageService;
+import org.onosproject.vtnrsc.AllocationPool;
+import org.onosproject.vtnrsc.DefaultAllocationPool;
+import org.onosproject.vtnrsc.DefaultHostRoute;
+import org.onosproject.vtnrsc.DefaultSubnet;
+import org.onosproject.vtnrsc.HostRoute;
+import org.onosproject.vtnrsc.Subnet;
+import org.onosproject.vtnrsc.SubnetId;
+import org.onosproject.vtnrsc.TenantId;
+import org.onosproject.vtnrsc.TenantNetworkId;
+import org.onosproject.vtnrsc.subnet.SubnetService;
+import org.onosproject.vtnrsc.tenantnetwork.TenantNetworkService;
+import org.slf4j.Logger;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Map;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Provides implementation of the Subnet service.
+ */
+@Component(immediate = true)
+@Service
+public class SubnetManager implements SubnetService {
+
+ private static final String SUBNET_ID_NULL = "Subnet ID cannot be null";
+ private static final String SUBNET_NOT_NULL = "Subnet cannot be null";
+ private static final String SUBNET = "vtn-subnet-store";
+ private static final String VTNRSC_APP = "org.onosproject.vtnrsc";
+
+
+ private final Logger log = getLogger(getClass());
+
+ protected Map<SubnetId, Subnet> subnetStore;
+ protected ApplicationId appId;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected StorageService storageService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected CoreService coreService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected TenantNetworkService tenantNetworkService;
+
+ @Activate
+ public void activate() {
+
+ appId = coreService.registerApplication(VTNRSC_APP);
+
+ subnetStore = storageService.<SubnetId, Subnet>consistentMapBuilder()
+ .withName(SUBNET)
+ .withApplicationId(appId)
+ .withPurgeOnUninstall()
+ .withSerializer(Serializer.using(Arrays.asList(KryoNamespaces.API),
+ Subnet.class,
+ SubnetId.class,
+ TenantNetworkId.class,
+ TenantId.class,
+ HostRoute.class,
+ DefaultHostRoute.class,
+ Subnet.Mode.class,
+ AllocationPool.class,
+ DefaultAllocationPool.class,
+ DefaultSubnet.class,
+ IpAddress.Version.class))
+ .build().asJavaMap();
+
+ log.info("Started");
+ }
+
+ @Deactivate
+ public void deactivate() {
+ log.info("Stopped");
+ }
+
+ @Override
+ public Iterable<Subnet> getSubnets() {
+ return Collections.unmodifiableCollection(subnetStore.values());
+ }
+
+ @Override
+ public Subnet getSubnet(SubnetId subnetId) {
+ checkNotNull(subnetId, SUBNET_ID_NULL);
+ return subnetStore.get(subnetId);
+ }
+
+ @Override
+ public boolean exists(SubnetId subnetId) {
+ checkNotNull(subnetId, SUBNET_ID_NULL);
+ return subnetStore.containsKey(subnetId);
+ }
+
+ @Override
+ public boolean createSubnets(Iterable<Subnet> subnets) {
+ checkNotNull(subnets, SUBNET_NOT_NULL);
+ for (Subnet subnet : subnets) {
+ if (!tenantNetworkService.exists(subnet.networkId())) {
+ log.debug("The network identifier that the subnet {} belong to is not exist",
+ subnet.networkId().toString(), subnet.id().toString());
+ return false;
+ }
+ subnetStore.put(subnet.id(), subnet);
+ if (!subnetStore.containsKey(subnet.id())) {
+ log.debug("The identified subnet whose identifier is {} create failed",
+ subnet.id().toString());
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean updateSubnets(Iterable<Subnet> subnets) {
+ checkNotNull(subnets, SUBNET_NOT_NULL);
+ if (subnets != null) {
+ for (Subnet subnet : subnets) {
+ if (!subnetStore.containsKey(subnet.id())) {
+ log.debug("The subnet is not exist whose identifier is {}",
+ subnet.id().toString());
+ return false;
+ }
+
+ subnetStore.put(subnet.id(), subnet);
+
+ if (!subnet.equals(subnetStore.get(subnet.id()))) {
+ log.debug("The subnet is updated failed whose identifier is {}",
+ subnet.id().toString());
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean removeSubnets(Iterable<SubnetId> subnetIds) {
+ checkNotNull(subnetIds, SUBNET_ID_NULL);
+ if (subnetIds != null) {
+ for (SubnetId subnetId : subnetIds) {
+ subnetStore.remove(subnetId);
+ if (subnetStore.containsKey(subnetId)) {
+ log.debug("The subnet created is failed whose identifier is {}",
+ subnetId.toString());
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/impl/package-info.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/impl/package-info.java
new file mode 100644
index 00000000..79040d8d
--- /dev/null
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/impl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Provides implementation of the Subnet service.
+ */
+package org.onosproject.vtnrsc.subnet.impl;
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/package-info.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/package-info.java
new file mode 100644
index 00000000..7b2bdb90
--- /dev/null
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/subnet/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Service for interacting with the inventory of subnets.
+ */
+package org.onosproject.vtnrsc.subnet;
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/TenantNetworkService.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/TenantNetworkService.java
index 56e8bcee..e246cc4e 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/TenantNetworkService.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/TenantNetworkService.java
@@ -1,80 +1,80 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc.tenantnetwork;
-
-import org.onosproject.vtnrsc.TenantNetwork;
-import org.onosproject.vtnrsc.TenantNetworkId;
-
-/**
- * Service for interacting with the inventory of tenantNetwork.
- */
-public interface TenantNetworkService {
-
- /**
- * Returns if the tenantNetwork is existed.
- *
- * @param networkId tenantNetwork identifier
- * @return true or false if one with the given identifier exists.
- */
- boolean exists(TenantNetworkId networkId);
-
- /**
- * Returns the number of tenantNetwork known to the system.
- *
- * @return number of tenantNetwork.
- */
- int getNetworkCount();
-
- /**
- * Returns an iterable collection of the currently known tenantNetwork.
- *
- * @return collection of tenantNetwork.
- */
- Iterable<TenantNetwork> getNetworks();
-
- /**
- * Returns the tenantNetwork with the identifier.
- *
- * @param networkId TenantNetwork identifier
- * @return TenantNetwork or null if one with the given identifier is not
- * known.
- */
- TenantNetwork getNetwork(TenantNetworkId networkId);
-
- /**
- * Creates tenantNetworks by networks.
- *
- * @param networks the collection of tenantNetworks
- * @return true if all given identifiers created successfully.
- */
- boolean createNetworks(Iterable<TenantNetwork> networks);
-
- /**
- * Updates tenantNetworks by tenantNetworks.
- *
- * @param networks the collection of tenantNetworks
- * @return true if all given identifiers updated successfully.
- */
- boolean updateNetworks(Iterable<TenantNetwork> networks);
-
- /**
- * Deletes tenantNetwork by tenantNetworkIds.
- *
- * @param networksIds the collection of tenantNetworkIds
- * @return true if the specified tenantNetworks deleted successfully.
- */
- boolean removeNetworks(Iterable<TenantNetworkId> networksIds);
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc.tenantnetwork;
+
+import org.onosproject.vtnrsc.TenantNetwork;
+import org.onosproject.vtnrsc.TenantNetworkId;
+
+/**
+ * Service for interacting with the inventory of tenantNetwork.
+ */
+public interface TenantNetworkService {
+
+ /**
+ * Returns if the tenantNetwork is existed.
+ *
+ * @param networkId tenantNetwork identifier
+ * @return true or false if one with the given identifier exists.
+ */
+ boolean exists(TenantNetworkId networkId);
+
+ /**
+ * Returns the number of tenantNetwork known to the system.
+ *
+ * @return number of tenantNetwork.
+ */
+ int getNetworkCount();
+
+ /**
+ * Returns an iterable collection of the currently known tenantNetwork.
+ *
+ * @return collection of tenantNetwork.
+ */
+ Iterable<TenantNetwork> getNetworks();
+
+ /**
+ * Returns the tenantNetwork with the identifier.
+ *
+ * @param networkId TenantNetwork identifier
+ * @return TenantNetwork or null if one with the given identifier is not
+ * known.
+ */
+ TenantNetwork getNetwork(TenantNetworkId networkId);
+
+ /**
+ * Creates tenantNetworks by networks.
+ *
+ * @param networks the collection of tenantNetworks
+ * @return true if all given identifiers created successfully.
+ */
+ boolean createNetworks(Iterable<TenantNetwork> networks);
+
+ /**
+ * Updates tenantNetworks by tenantNetworks.
+ *
+ * @param networks the collection of tenantNetworks
+ * @return true if all given identifiers updated successfully.
+ */
+ boolean updateNetworks(Iterable<TenantNetwork> networks);
+
+ /**
+ * Deletes tenantNetwork by tenantNetworkIds.
+ *
+ * @param networksIds the collection of tenantNetworkIds
+ * @return true if the specified tenantNetworks deleted successfully.
+ */
+ boolean removeNetworks(Iterable<TenantNetworkId> networksIds);
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/impl/TenantNetworkManager.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/impl/TenantNetworkManager.java
index c5290ad2..0dfc99e2 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/impl/TenantNetworkManager.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/impl/TenantNetworkManager.java
@@ -1,167 +1,167 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc.tenantnetwork.impl;
-
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.Service;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.core.CoreService;
-import org.onosproject.store.serializers.KryoNamespaces;
-import org.onosproject.store.service.Serializer;
-import org.onosproject.store.service.StorageService;
-import org.onosproject.vtnrsc.DefaultTenantNetwork;
-import org.onosproject.vtnrsc.PhysicalNetwork;
-import org.onosproject.vtnrsc.SegmentationId;
-import org.onosproject.vtnrsc.TenantId;
-import org.onosproject.vtnrsc.TenantNetwork;
-import org.onosproject.vtnrsc.TenantNetworkId;
-import org.onosproject.vtnrsc.tenantnetwork.TenantNetworkService;
-import org.slf4j.Logger;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Map;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Provides implementation of the tenantNetworkService.
- */
-@Component(immediate = true)
-@Service
-public class TenantNetworkManager implements TenantNetworkService {
-
- private static final String NETWORK_ID_NULL = "Network ID cannot be null";
- private static final String NETWORK_NOT_NULL = "Network ID cannot be null";
- private static final String TENANTNETWORK = "vtn-tenant-network-store";
- private static final String VTNRSC_APP = "org.onosproject.vtnrsc";
-
- protected Map<TenantNetworkId, TenantNetwork> networkIdAsKeyStore;
- protected ApplicationId appId;
-
- private final Logger log = getLogger(getClass());
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected StorageService storageService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected CoreService coreService;
-
-
- @Activate
- public void activate() {
-
- appId = coreService.registerApplication(VTNRSC_APP);
-
- networkIdAsKeyStore = storageService.<TenantNetworkId, TenantNetwork>consistentMapBuilder()
- .withName(TENANTNETWORK)
- .withApplicationId(appId)
- .withPurgeOnUninstall()
- .withSerializer(Serializer.using(Arrays.asList(KryoNamespaces.API),
- TenantNetworkId.class,
- DefaultTenantNetwork.class,
- TenantNetwork.State.class,
- TenantId.class,
- TenantNetwork.Type.class,
- PhysicalNetwork.class,
- SegmentationId.class))
- .build().asJavaMap();
-
- log.info("Started");
- }
-
- @Deactivate
- public void deactivate() {
- log.info("Stopped");
- }
-
- @Override
- public boolean exists(TenantNetworkId networkId) {
- checkNotNull(networkId, NETWORK_ID_NULL);
- return networkIdAsKeyStore.containsKey(networkId);
- }
-
- @Override
- public int getNetworkCount() {
- return networkIdAsKeyStore.size();
- }
-
- @Override
- public Iterable<TenantNetwork> getNetworks() {
- return Collections.unmodifiableCollection(networkIdAsKeyStore.values());
- }
-
- @Override
- public TenantNetwork getNetwork(TenantNetworkId networkId) {
- checkNotNull(networkId, NETWORK_ID_NULL);
- return networkIdAsKeyStore.get(networkId);
- }
-
- @Override
- public boolean createNetworks(Iterable<TenantNetwork> networks) {
- checkNotNull(networks, NETWORK_NOT_NULL);
- for (TenantNetwork network : networks) {
- networkIdAsKeyStore.put(network.id(), network);
- if (!networkIdAsKeyStore.containsKey(network.id())) {
- log.debug("The tenantNetwork is created failed which identifier was {}", network.id()
- .toString());
- return false;
- }
- }
- return true;
- }
-
- @Override
- public boolean updateNetworks(Iterable<TenantNetwork> networks) {
- checkNotNull(networks, NETWORK_NOT_NULL);
- for (TenantNetwork network : networks) {
- if (!networkIdAsKeyStore.containsKey(network.id())) {
- log.debug("The tenantNetwork is not exist whose identifier was {} ",
- network.id().toString());
- return false;
- }
-
- networkIdAsKeyStore.put(network.id(), network);
-
- if (!network.equals(networkIdAsKeyStore.get(network.id()))) {
- log.debug("The tenantNetwork is updated failed whose identifier was {} ",
- network.id().toString());
- return false;
- }
-
- }
- return true;
- }
-
- @Override
- public boolean removeNetworks(Iterable<TenantNetworkId> networkIds) {
- checkNotNull(networkIds, NETWORK_NOT_NULL);
- for (TenantNetworkId networkId : networkIds) {
- networkIdAsKeyStore.remove(networkId);
- if (networkIdAsKeyStore.containsKey(networkId)) {
- log.debug("The tenantNetwork is removed failed whose identifier was {}",
- networkId.toString());
- return false;
- }
- }
- return true;
- }
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc.tenantnetwork.impl;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.Service;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.core.CoreService;
+import org.onosproject.store.serializers.KryoNamespaces;
+import org.onosproject.store.service.Serializer;
+import org.onosproject.store.service.StorageService;
+import org.onosproject.vtnrsc.DefaultTenantNetwork;
+import org.onosproject.vtnrsc.PhysicalNetwork;
+import org.onosproject.vtnrsc.SegmentationId;
+import org.onosproject.vtnrsc.TenantId;
+import org.onosproject.vtnrsc.TenantNetwork;
+import org.onosproject.vtnrsc.TenantNetworkId;
+import org.onosproject.vtnrsc.tenantnetwork.TenantNetworkService;
+import org.slf4j.Logger;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Map;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Provides implementation of the tenantNetworkService.
+ */
+@Component(immediate = true)
+@Service
+public class TenantNetworkManager implements TenantNetworkService {
+
+ private static final String NETWORK_ID_NULL = "Network ID cannot be null";
+ private static final String NETWORK_NOT_NULL = "Network ID cannot be null";
+ private static final String TENANTNETWORK = "vtn-tenant-network-store";
+ private static final String VTNRSC_APP = "org.onosproject.vtnrsc";
+
+ protected Map<TenantNetworkId, TenantNetwork> networkIdAsKeyStore;
+ protected ApplicationId appId;
+
+ private final Logger log = getLogger(getClass());
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected StorageService storageService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected CoreService coreService;
+
+
+ @Activate
+ public void activate() {
+
+ appId = coreService.registerApplication(VTNRSC_APP);
+
+ networkIdAsKeyStore = storageService.<TenantNetworkId, TenantNetwork>consistentMapBuilder()
+ .withName(TENANTNETWORK)
+ .withApplicationId(appId)
+ .withPurgeOnUninstall()
+ .withSerializer(Serializer.using(Arrays.asList(KryoNamespaces.API),
+ TenantNetworkId.class,
+ DefaultTenantNetwork.class,
+ TenantNetwork.State.class,
+ TenantId.class,
+ TenantNetwork.Type.class,
+ PhysicalNetwork.class,
+ SegmentationId.class))
+ .build().asJavaMap();
+
+ log.info("Started");
+ }
+
+ @Deactivate
+ public void deactivate() {
+ log.info("Stopped");
+ }
+
+ @Override
+ public boolean exists(TenantNetworkId networkId) {
+ checkNotNull(networkId, NETWORK_ID_NULL);
+ return networkIdAsKeyStore.containsKey(networkId);
+ }
+
+ @Override
+ public int getNetworkCount() {
+ return networkIdAsKeyStore.size();
+ }
+
+ @Override
+ public Iterable<TenantNetwork> getNetworks() {
+ return Collections.unmodifiableCollection(networkIdAsKeyStore.values());
+ }
+
+ @Override
+ public TenantNetwork getNetwork(TenantNetworkId networkId) {
+ checkNotNull(networkId, NETWORK_ID_NULL);
+ return networkIdAsKeyStore.get(networkId);
+ }
+
+ @Override
+ public boolean createNetworks(Iterable<TenantNetwork> networks) {
+ checkNotNull(networks, NETWORK_NOT_NULL);
+ for (TenantNetwork network : networks) {
+ networkIdAsKeyStore.put(network.id(), network);
+ if (!networkIdAsKeyStore.containsKey(network.id())) {
+ log.debug("The tenantNetwork is created failed which identifier was {}", network.id()
+ .toString());
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean updateNetworks(Iterable<TenantNetwork> networks) {
+ checkNotNull(networks, NETWORK_NOT_NULL);
+ for (TenantNetwork network : networks) {
+ if (!networkIdAsKeyStore.containsKey(network.id())) {
+ log.debug("The tenantNetwork is not exist whose identifier was {} ",
+ network.id().toString());
+ return false;
+ }
+
+ networkIdAsKeyStore.put(network.id(), network);
+
+ if (!network.equals(networkIdAsKeyStore.get(network.id()))) {
+ log.debug("The tenantNetwork is updated failed whose identifier was {} ",
+ network.id().toString());
+ return false;
+ }
+
+ }
+ return true;
+ }
+
+ @Override
+ public boolean removeNetworks(Iterable<TenantNetworkId> networkIds) {
+ checkNotNull(networkIds, NETWORK_NOT_NULL);
+ for (TenantNetworkId networkId : networkIds) {
+ networkIdAsKeyStore.remove(networkId);
+ if (networkIdAsKeyStore.containsKey(networkId)) {
+ log.debug("The tenantNetwork is removed failed whose identifier was {}",
+ networkId.toString());
+ return false;
+ }
+ }
+ return true;
+ }
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/impl/package-info.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/impl/package-info.java
new file mode 100644
index 00000000..f381fda6
--- /dev/null
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/impl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Implementation of service for interacting with the inventory of tenant networks.
+ */
+package org.onosproject.vtnrsc.tenantnetwork.impl;
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/package-info.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/package-info.java
new file mode 100644
index 00000000..1489c973
--- /dev/null
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tenantnetwork/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Service for interacting with the inventory of tenant networks.
+ */
+package org.onosproject.vtnrsc.tenantnetwork;
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tunnel/TunnelConfigService.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tunnel/TunnelConfigService.java
index f09caf29..6f3cf653 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tunnel/TunnelConfigService.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tunnel/TunnelConfigService.java
@@ -1,72 +1,72 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc.tunnel;
-
-import org.onosproject.vtnrsc.Subnet;
-import org.onosproject.vtnrsc.SubnetId;
-
-
-/**
- * Service for interacting with the inventory of subnets.
- */
-public interface TunnelConfigService {
- /**
- * Returns the subnet with the specified identifier.
- *
- * @param subnetId subnet identifier
- * @return true or false
- */
- boolean exists(SubnetId subnetId);
- /**
- * Returns a collection of the currently known subnets.
- *
- * @return iterable collection of subnets
- */
- Iterable<Subnet> getSubnets();
-
- /**
- * Returns the subnet with the specified identifier.
- *
- * @param subnetId subnet identifier
- * @return subnet or null if one with the given identifier is not known
- */
- Subnet getSubnet(SubnetId subnetId);
- /**
- * Creates new subnets.
- *
- * @param subnets the iterable collection of subnets
- * @return true if the identifier subnet has been created right
- */
- boolean createSubnets(Iterable<Subnet> subnets);
-
- /**
- * Updates existing subnets.
- *
- * @param subnets the iterable collection of subnets
- * @return true if all subnets were updated successfully
- */
- boolean updateSubnets(Iterable<Subnet> subnets);
-
- /**
- * Administratively removes the specified subnets from the store.
- *
- * @param subnetIds the iterable collection of subnets identifier
- * @return true if remove identifier subnets successfully
- */
- boolean removeSubnets(Iterable<SubnetId> subnetIds);
-
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc.tunnel;
+
+import org.onosproject.vtnrsc.Subnet;
+import org.onosproject.vtnrsc.SubnetId;
+
+
+/**
+ * Service for interacting with the inventory of subnets.
+ */
+public interface TunnelConfigService {
+ /**
+ * Returns the subnet with the specified identifier.
+ *
+ * @param subnetId subnet identifier
+ * @return true or false
+ */
+ boolean exists(SubnetId subnetId);
+ /**
+ * Returns a collection of the currently known subnets.
+ *
+ * @return iterable collection of subnets
+ */
+ Iterable<Subnet> getSubnets();
+
+ /**
+ * Returns the subnet with the specified identifier.
+ *
+ * @param subnetId subnet identifier
+ * @return subnet or null if one with the given identifier is not known
+ */
+ Subnet getSubnet(SubnetId subnetId);
+ /**
+ * Creates new subnets.
+ *
+ * @param subnets the iterable collection of subnets
+ * @return true if the identifier subnet has been created right
+ */
+ boolean createSubnets(Iterable<Subnet> subnets);
+
+ /**
+ * Updates existing subnets.
+ *
+ * @param subnets the iterable collection of subnets
+ * @return true if all subnets were updated successfully
+ */
+ boolean updateSubnets(Iterable<Subnet> subnets);
+
+ /**
+ * Administratively removes the specified subnets from the store.
+ *
+ * @param subnetIds the iterable collection of subnets identifier
+ * @return true if remove identifier subnets successfully
+ */
+ boolean removeSubnets(Iterable<SubnetId> subnetIds);
+
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tunnel/package-info.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tunnel/package-info.java
new file mode 100644
index 00000000..3a84e6e3
--- /dev/null
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/tunnel/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Service for interacting with the inventory of subnets.
+ */
+package org.onosproject.vtnrsc.tunnel;
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/VirtualPortService.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/VirtualPortService.java
index 24ddb9f1..05ebccf9 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/VirtualPortService.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/VirtualPortService.java
@@ -1,100 +1,100 @@
-/*
- * Copyright 2015 Open Porting Laboratory
- *
- * 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.onosproject.vtnrsc.virtualport;
-
-import java.util.Collection;
-
-import org.onosproject.net.DeviceId;
-import org.onosproject.vtnrsc.TenantId;
-import org.onosproject.vtnrsc.TenantNetworkId;
-import org.onosproject.vtnrsc.VirtualPort;
-import org.onosproject.vtnrsc.VirtualPortId;
-
-/**
- * Service for interacting with the inventory of virtualPort.
- */
-public interface VirtualPortService {
- /**
- * Returns if the virtualPort is existed.
- *
- * @param virtualPortId virtualPort identifier
- * @return true or false if one with the given identifier is not existed.
- */
- boolean exists(VirtualPortId virtualPortId);
-
- /**
- * Returns the virtualPort with the identifier.
- *
- * @param virtualPortId virtualPort ID
- * @return VirtualPort or null if one with the given ID is not know.
- */
- VirtualPort getPort(VirtualPortId virtualPortId);
-
- /**
- * Returns the collection of the currently known virtualPort.
- * @return collection of VirtualPort.
- */
- Collection<VirtualPort> getPorts();
-
- /**
- * Returns the collection of the virtualPorts associated with the networkId.
- *
- * @param networkId the network identifer
- * @return collection of virtualPort.
- */
- Collection<VirtualPort> getPorts(TenantNetworkId networkId);
-
- /**
- * Returns the collection of the virtualPorts associated with the tenantId.
- *
- * @param tenantId the tenant identifier
- * @return collection of virtualPorts.
- */
- Collection<VirtualPort> getPorts(TenantId tenantId);
-
- /**
- * Returns the collection of the virtualPorts associated with the deviceId.
- *
- * @param deviceId the device identifier
- * @return collection of virtualPort.
- */
- Collection<VirtualPort> getPorts(DeviceId deviceId);
-
- /**
- * Creates virtualPorts by virtualPorts.
- *
- * @param virtualPorts the iterable collection of virtualPorts
- * @return true if all given identifiers created successfully.
- */
- boolean createPorts(Iterable<VirtualPort> virtualPorts);
-
- /**
- * Updates virtualPorts by virtualPorts.
- *
- * @param virtualPorts the iterable collection of virtualPorts
- * @return true if all given identifiers updated successfully.
- */
- boolean updatePorts(Iterable<VirtualPort> virtualPorts);
-
- /**
- * Deletes virtualPortIds by virtualPortIds.
- *
- * @param virtualPortIds the iterable collection of virtualPort identifiers
- * @return true or false if one with the given identifier to delete is
- * successfully.
- */
- boolean removePorts(Iterable<VirtualPortId> virtualPortIds);
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc.virtualport;
+
+import java.util.Collection;
+
+import org.onosproject.net.DeviceId;
+import org.onosproject.vtnrsc.TenantId;
+import org.onosproject.vtnrsc.TenantNetworkId;
+import org.onosproject.vtnrsc.VirtualPort;
+import org.onosproject.vtnrsc.VirtualPortId;
+
+/**
+ * Service for interacting with the inventory of virtualPort.
+ */
+public interface VirtualPortService {
+ /**
+ * Returns if the virtualPort is existed.
+ *
+ * @param virtualPortId virtualPort identifier
+ * @return true or false if one with the given identifier is not existed.
+ */
+ boolean exists(VirtualPortId virtualPortId);
+
+ /**
+ * Returns the virtualPort with the identifier.
+ *
+ * @param virtualPortId virtualPort ID
+ * @return VirtualPort or null if one with the given ID is not know.
+ */
+ VirtualPort getPort(VirtualPortId virtualPortId);
+
+ /**
+ * Returns the collection of the currently known virtualPort.
+ * @return collection of VirtualPort.
+ */
+ Collection<VirtualPort> getPorts();
+
+ /**
+ * Returns the collection of the virtualPorts associated with the networkId.
+ *
+ * @param networkId the network identifer
+ * @return collection of virtualPort.
+ */
+ Collection<VirtualPort> getPorts(TenantNetworkId networkId);
+
+ /**
+ * Returns the collection of the virtualPorts associated with the tenantId.
+ *
+ * @param tenantId the tenant identifier
+ * @return collection of virtualPorts.
+ */
+ Collection<VirtualPort> getPorts(TenantId tenantId);
+
+ /**
+ * Returns the collection of the virtualPorts associated with the deviceId.
+ *
+ * @param deviceId the device identifier
+ * @return collection of virtualPort.
+ */
+ Collection<VirtualPort> getPorts(DeviceId deviceId);
+
+ /**
+ * Creates virtualPorts by virtualPorts.
+ *
+ * @param virtualPorts the iterable collection of virtualPorts
+ * @return true if all given identifiers created successfully.
+ */
+ boolean createPorts(Iterable<VirtualPort> virtualPorts);
+
+ /**
+ * Updates virtualPorts by virtualPorts.
+ *
+ * @param virtualPorts the iterable collection of virtualPorts
+ * @return true if all given identifiers updated successfully.
+ */
+ boolean updatePorts(Iterable<VirtualPort> virtualPorts);
+
+ /**
+ * Deletes virtualPortIds by virtualPortIds.
+ *
+ * @param virtualPortIds the iterable collection of virtualPort identifiers
+ * @return true or false if one with the given identifier to delete is
+ * successfully.
+ */
+ boolean removePorts(Iterable<VirtualPortId> virtualPortIds);
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/impl/VirtualPortManager.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/impl/VirtualPortManager.java
index e0c49f5b..bea0fd55 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/impl/VirtualPortManager.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/impl/VirtualPortManager.java
@@ -1,222 +1,222 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc.virtualport.impl;
-
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.Service;
-import org.onlab.packet.IpAddress;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.core.CoreService;
-import org.onosproject.net.DeviceId;
-import org.onosproject.store.serializers.KryoNamespaces;
-import org.onosproject.store.service.Serializer;
-import org.onosproject.store.service.StorageService;
-import org.onosproject.vtnrsc.AllowedAddressPair;
-import org.onosproject.vtnrsc.BindingHostId;
-import org.onosproject.vtnrsc.DefaultVirtualPort;
-import org.onosproject.vtnrsc.FixedIp;
-import org.onosproject.vtnrsc.SecurityGroup;
-import org.onosproject.vtnrsc.SubnetId;
-import org.onosproject.vtnrsc.TenantId;
-import org.onosproject.vtnrsc.TenantNetworkId;
-import org.onosproject.vtnrsc.VirtualPort;
-import org.onosproject.vtnrsc.VirtualPortId;
-import org.onosproject.vtnrsc.tenantnetwork.TenantNetworkService;
-import org.onosproject.vtnrsc.virtualport.VirtualPortService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Provides implementation of the VirtualPort APIs.
- */
-@Component(immediate = true)
-@Service
-public class VirtualPortManager implements VirtualPortService {
-
- private final Logger log = LoggerFactory.getLogger(getClass());
-
- private static final String VIRTUALPORT = "vtn-virtual-port";
- private static final String VTNRSC_APP = "org.onosproject.vtnrsc";
-
- private static final String VIRTUALPORT_ID_NULL = "VirtualPort ID cannot be null";
- private static final String VIRTUALPORT_NOT_NULL = "VirtualPort cannot be null";
- private static final String TENANTID_NOT_NULL = "TenantId cannot be null";
- private static final String NETWORKID_NOT_NULL = "NetworkId cannot be null";
- private static final String DEVICEID_NOT_NULL = "DeviceId cannot be null";
-
- protected Map<VirtualPortId, VirtualPort> vPortStore;
- protected ApplicationId appId;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected StorageService storageService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected TenantNetworkService networkService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected CoreService coreService;
-
- @Activate
- public void activate() {
-
- appId = coreService.registerApplication(VTNRSC_APP);
-
- vPortStore = storageService.<VirtualPortId, VirtualPort>consistentMapBuilder()
- .withName(VIRTUALPORT)
- .withApplicationId(appId)
- .withPurgeOnUninstall()
- .withSerializer(Serializer.using(Arrays.asList(KryoNamespaces.API),
- VirtualPortId.class,
- TenantNetworkId.class,
- VirtualPort.State.class,
- TenantId.class,
- AllowedAddressPair.class,
- FixedIp.class,
- BindingHostId.class,
- SecurityGroup.class,
- SubnetId.class,
- IpAddress.class,
- DefaultVirtualPort.class))
- .build().asJavaMap();
- log.info("Started");
- }
-
- @Deactivate
- public void deactivate() {
- vPortStore.clear();
- log.info("Stoppped");
- }
-
- @Override
- public boolean exists(VirtualPortId vPortId) {
- checkNotNull(vPortId, VIRTUALPORT_ID_NULL);
- return vPortStore.containsKey(vPortId);
- }
-
- @Override
- public VirtualPort getPort(VirtualPortId vPortId) {
- checkNotNull(vPortId, VIRTUALPORT_ID_NULL);
- return vPortStore.get(vPortId);
- }
-
- @Override
- public Collection<VirtualPort> getPorts() {
- return Collections.unmodifiableCollection(vPortStore.values());
- }
-
- @Override
- public Collection<VirtualPort> getPorts(TenantNetworkId networkId) {
- checkNotNull(networkId, NETWORKID_NOT_NULL);
- Collection<VirtualPort> vPortWithNetworkIds = vPortStore.values();
- for (VirtualPort vPort : vPortWithNetworkIds) {
- if (!vPort.networkId().equals(networkId)) {
- vPortWithNetworkIds.remove(vPort);
- }
- }
- return vPortWithNetworkIds;
- }
-
- @Override
- public Collection<VirtualPort> getPorts(TenantId tenantId) {
- checkNotNull(tenantId, TENANTID_NOT_NULL);
- Collection<VirtualPort> vPortWithTenantIds = vPortStore.values();
- for (VirtualPort vPort : vPortWithTenantIds) {
- if (!vPort.tenantId().equals(tenantId)) {
- vPortWithTenantIds.remove(vPort);
- }
- }
- return vPortWithTenantIds;
- }
-
- @Override
- public Collection<VirtualPort> getPorts(DeviceId deviceId) {
- checkNotNull(deviceId, DEVICEID_NOT_NULL);
- Collection<VirtualPort> vPortWithDeviceIds = vPortStore.values();
- for (VirtualPort vPort : vPortWithDeviceIds) {
- if (!vPort.deviceId().equals(deviceId)) {
- vPortWithDeviceIds.remove(vPort);
- }
- }
- return vPortWithDeviceIds;
- }
-
- @Override
- public boolean createPorts(Iterable<VirtualPort> vPorts) {
- checkNotNull(vPorts, VIRTUALPORT_NOT_NULL);
- for (VirtualPort vPort : vPorts) {
- log.debug("vPortId is {} ", vPort.portId().toString());
- vPortStore.put(vPort.portId(), vPort);
- if (!vPortStore.containsKey(vPort.portId())) {
- log.debug("The virtualPort is created failed whose identifier is {} ",
- vPort.portId().toString());
- return false;
- }
- }
- return true;
- }
-
- @Override
- public boolean updatePorts(Iterable<VirtualPort> vPorts) {
- checkNotNull(vPorts, VIRTUALPORT_NOT_NULL);
- if (vPorts != null) {
- for (VirtualPort vPort : vPorts) {
- vPortStore.put(vPort.portId(), vPort);
- if (!vPortStore.containsKey(vPort.portId())) {
- log.debug("The virtualPort is not exist whose identifier is {}",
- vPort.portId().toString());
- return false;
- }
-
- vPortStore.put(vPort.portId(), vPort);
-
- if (!vPort.equals(vPortStore.get(vPort.portId()))) {
- log.debug("The virtualPort is updated failed whose identifier is {}",
- vPort.portId().toString());
- return false;
- }
- }
- }
- return true;
- }
-
- @Override
- public boolean removePorts(Iterable<VirtualPortId> vPortIds) {
- checkNotNull(vPortIds, VIRTUALPORT_ID_NULL);
- if (vPortIds != null) {
- for (VirtualPortId vPortId : vPortIds) {
- vPortStore.remove(vPortId);
- if (vPortStore.containsKey(vPortId)) {
- log.debug("The virtualPort is removed failed whose identifier is {}",
- vPortId.toString());
- return false;
- }
- }
- }
- return true;
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc.virtualport.impl;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.Service;
+import org.onlab.packet.IpAddress;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.core.CoreService;
+import org.onosproject.net.DeviceId;
+import org.onosproject.store.serializers.KryoNamespaces;
+import org.onosproject.store.service.Serializer;
+import org.onosproject.store.service.StorageService;
+import org.onosproject.vtnrsc.AllowedAddressPair;
+import org.onosproject.vtnrsc.BindingHostId;
+import org.onosproject.vtnrsc.DefaultVirtualPort;
+import org.onosproject.vtnrsc.FixedIp;
+import org.onosproject.vtnrsc.SecurityGroup;
+import org.onosproject.vtnrsc.SubnetId;
+import org.onosproject.vtnrsc.TenantId;
+import org.onosproject.vtnrsc.TenantNetworkId;
+import org.onosproject.vtnrsc.VirtualPort;
+import org.onosproject.vtnrsc.VirtualPortId;
+import org.onosproject.vtnrsc.tenantnetwork.TenantNetworkService;
+import org.onosproject.vtnrsc.virtualport.VirtualPortService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Provides implementation of the VirtualPort APIs.
+ */
+@Component(immediate = true)
+@Service
+public class VirtualPortManager implements VirtualPortService {
+
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ private static final String VIRTUALPORT = "vtn-virtual-port";
+ private static final String VTNRSC_APP = "org.onosproject.vtnrsc";
+
+ private static final String VIRTUALPORT_ID_NULL = "VirtualPort ID cannot be null";
+ private static final String VIRTUALPORT_NOT_NULL = "VirtualPort cannot be null";
+ private static final String TENANTID_NOT_NULL = "TenantId cannot be null";
+ private static final String NETWORKID_NOT_NULL = "NetworkId cannot be null";
+ private static final String DEVICEID_NOT_NULL = "DeviceId cannot be null";
+
+ protected Map<VirtualPortId, VirtualPort> vPortStore;
+ protected ApplicationId appId;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected StorageService storageService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected TenantNetworkService networkService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected CoreService coreService;
+
+ @Activate
+ public void activate() {
+
+ appId = coreService.registerApplication(VTNRSC_APP);
+
+ vPortStore = storageService.<VirtualPortId, VirtualPort>consistentMapBuilder()
+ .withName(VIRTUALPORT)
+ .withApplicationId(appId)
+ .withPurgeOnUninstall()
+ .withSerializer(Serializer.using(Arrays.asList(KryoNamespaces.API),
+ VirtualPortId.class,
+ TenantNetworkId.class,
+ VirtualPort.State.class,
+ TenantId.class,
+ AllowedAddressPair.class,
+ FixedIp.class,
+ BindingHostId.class,
+ SecurityGroup.class,
+ SubnetId.class,
+ IpAddress.class,
+ DefaultVirtualPort.class))
+ .build().asJavaMap();
+ log.info("Started");
+ }
+
+ @Deactivate
+ public void deactivate() {
+ vPortStore.clear();
+ log.info("Stoppped");
+ }
+
+ @Override
+ public boolean exists(VirtualPortId vPortId) {
+ checkNotNull(vPortId, VIRTUALPORT_ID_NULL);
+ return vPortStore.containsKey(vPortId);
+ }
+
+ @Override
+ public VirtualPort getPort(VirtualPortId vPortId) {
+ checkNotNull(vPortId, VIRTUALPORT_ID_NULL);
+ return vPortStore.get(vPortId);
+ }
+
+ @Override
+ public Collection<VirtualPort> getPorts() {
+ return Collections.unmodifiableCollection(vPortStore.values());
+ }
+
+ @Override
+ public Collection<VirtualPort> getPorts(TenantNetworkId networkId) {
+ checkNotNull(networkId, NETWORKID_NOT_NULL);
+ Collection<VirtualPort> vPortWithNetworkIds = vPortStore.values();
+ for (VirtualPort vPort : vPortWithNetworkIds) {
+ if (!vPort.networkId().equals(networkId)) {
+ vPortWithNetworkIds.remove(vPort);
+ }
+ }
+ return vPortWithNetworkIds;
+ }
+
+ @Override
+ public Collection<VirtualPort> getPorts(TenantId tenantId) {
+ checkNotNull(tenantId, TENANTID_NOT_NULL);
+ Collection<VirtualPort> vPortWithTenantIds = vPortStore.values();
+ for (VirtualPort vPort : vPortWithTenantIds) {
+ if (!vPort.tenantId().equals(tenantId)) {
+ vPortWithTenantIds.remove(vPort);
+ }
+ }
+ return vPortWithTenantIds;
+ }
+
+ @Override
+ public Collection<VirtualPort> getPorts(DeviceId deviceId) {
+ checkNotNull(deviceId, DEVICEID_NOT_NULL);
+ Collection<VirtualPort> vPortWithDeviceIds = vPortStore.values();
+ for (VirtualPort vPort : vPortWithDeviceIds) {
+ if (!vPort.deviceId().equals(deviceId)) {
+ vPortWithDeviceIds.remove(vPort);
+ }
+ }
+ return vPortWithDeviceIds;
+ }
+
+ @Override
+ public boolean createPorts(Iterable<VirtualPort> vPorts) {
+ checkNotNull(vPorts, VIRTUALPORT_NOT_NULL);
+ for (VirtualPort vPort : vPorts) {
+ log.debug("vPortId is {} ", vPort.portId().toString());
+ vPortStore.put(vPort.portId(), vPort);
+ if (!vPortStore.containsKey(vPort.portId())) {
+ log.debug("The virtualPort is created failed whose identifier is {} ",
+ vPort.portId().toString());
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean updatePorts(Iterable<VirtualPort> vPorts) {
+ checkNotNull(vPorts, VIRTUALPORT_NOT_NULL);
+ if (vPorts != null) {
+ for (VirtualPort vPort : vPorts) {
+ vPortStore.put(vPort.portId(), vPort);
+ if (!vPortStore.containsKey(vPort.portId())) {
+ log.debug("The virtualPort is not exist whose identifier is {}",
+ vPort.portId().toString());
+ return false;
+ }
+
+ vPortStore.put(vPort.portId(), vPort);
+
+ if (!vPort.equals(vPortStore.get(vPort.portId()))) {
+ log.debug("The virtualPort is updated failed whose identifier is {}",
+ vPort.portId().toString());
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean removePorts(Iterable<VirtualPortId> vPortIds) {
+ checkNotNull(vPortIds, VIRTUALPORT_ID_NULL);
+ if (vPortIds != null) {
+ for (VirtualPortId vPortId : vPortIds) {
+ vPortStore.remove(vPortId);
+ if (vPortStore.containsKey(vPortId)) {
+ log.debug("The virtualPort is removed failed whose identifier is {}",
+ vPortId.toString());
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/impl/package-info.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/impl/package-info.java
new file mode 100644
index 00000000..24eb0d3f
--- /dev/null
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/impl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Implementation of service for interacting with the inventory of virtual ports.
+ */
+package org.onosproject.vtnrsc.virtualport.impl;
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/package-info.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/package-info.java
new file mode 100644
index 00000000..06a01a04
--- /dev/null
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/virtualport/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Service for interacting with the inventory of virtual ports.
+ */
+package org.onosproject.vtnrsc.virtualport;
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/AllocationPoolsCodec.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/AllocationPoolsCodec.java
index 4a6c3210..57c97c1c 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/AllocationPoolsCodec.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/AllocationPoolsCodec.java
@@ -1,40 +1,40 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc.web;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.onosproject.codec.CodecContext;
-import org.onosproject.codec.JsonCodec;
-import org.onosproject.vtnrsc.AllocationPool;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-/**
- * Subnet AllocationPool codec.
- */
-public final class AllocationPoolsCodec extends JsonCodec<AllocationPool> {
-
- @Override
- public ObjectNode encode(AllocationPool alocPool, CodecContext context) {
- checkNotNull(alocPool, "AllocationPools cannot be null");
- ObjectNode result = context.mapper().createObjectNode()
- .put("start", alocPool.startIp().toString())
- .put("end", alocPool.endIp().toString());
- return result;
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc.web;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+import org.onosproject.vtnrsc.AllocationPool;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+/**
+ * Subnet AllocationPool codec.
+ */
+public final class AllocationPoolsCodec extends JsonCodec<AllocationPool> {
+
+ @Override
+ public ObjectNode encode(AllocationPool alocPool, CodecContext context) {
+ checkNotNull(alocPool, "AllocationPools cannot be null");
+ ObjectNode result = context.mapper().createObjectNode()
+ .put("start", alocPool.startIp().toString())
+ .put("end", alocPool.endIp().toString());
+ return result;
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/AllowedAddressPairCodec.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/AllowedAddressPairCodec.java
index 6c5cc2e8..7960808f 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/AllowedAddressPairCodec.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/AllowedAddressPairCodec.java
@@ -1,40 +1,40 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc.web;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.onosproject.codec.CodecContext;
-import org.onosproject.codec.JsonCodec;
-import org.onosproject.vtnrsc.AllowedAddressPair;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-/**
- * VirtualPort AllowedAddressPair codec.
- */
-public final class AllowedAddressPairCodec extends JsonCodec<AllowedAddressPair> {
-
- @Override
- public ObjectNode encode(AllowedAddressPair alocAddPair, CodecContext context) {
- checkNotNull(alocAddPair, "AllowedAddressPair cannot be null");
- ObjectNode result = context.mapper().createObjectNode()
- .put("ip_address", alocAddPair.ip().toString())
- .put("mac_address", alocAddPair.mac().toString());
- return result;
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc.web;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+import org.onosproject.vtnrsc.AllowedAddressPair;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+/**
+ * VirtualPort AllowedAddressPair codec.
+ */
+public final class AllowedAddressPairCodec extends JsonCodec<AllowedAddressPair> {
+
+ @Override
+ public ObjectNode encode(AllowedAddressPair alocAddPair, CodecContext context) {
+ checkNotNull(alocAddPair, "AllowedAddressPair cannot be null");
+ ObjectNode result = context.mapper().createObjectNode()
+ .put("ip_address", alocAddPair.ip().toString())
+ .put("mac_address", alocAddPair.mac().toString());
+ return result;
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/FixedIpCodec.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/FixedIpCodec.java
index a69b8213..96c9bb4e 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/FixedIpCodec.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/FixedIpCodec.java
@@ -1,40 +1,40 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc.web;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.onosproject.codec.CodecContext;
-import org.onosproject.codec.JsonCodec;
-import org.onosproject.vtnrsc.FixedIp;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-/**
- * VirtualPort FixedIp codec.
- */
-public final class FixedIpCodec extends JsonCodec<FixedIp> {
-
- @Override
- public ObjectNode encode(FixedIp fixIp, CodecContext context) {
- checkNotNull(fixIp, "FixedIp cannot be null");
- ObjectNode result = context.mapper().createObjectNode()
- .put("subnet_id", fixIp.subnetId().toString())
- .put("ip_address", fixIp.ip().toString());
- return result;
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc.web;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+import org.onosproject.vtnrsc.FixedIp;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+/**
+ * VirtualPort FixedIp codec.
+ */
+public final class FixedIpCodec extends JsonCodec<FixedIp> {
+
+ @Override
+ public ObjectNode encode(FixedIp fixIp, CodecContext context) {
+ checkNotNull(fixIp, "FixedIp cannot be null");
+ ObjectNode result = context.mapper().createObjectNode()
+ .put("subnet_id", fixIp.subnetId().toString())
+ .put("ip_address", fixIp.ip().toString());
+ return result;
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/HostRoutesCodec.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/HostRoutesCodec.java
index ba977a0b..69ca6b3f 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/HostRoutesCodec.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/HostRoutesCodec.java
@@ -1,40 +1,40 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc.web;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.onosproject.codec.CodecContext;
-import org.onosproject.codec.JsonCodec;
-import org.onosproject.vtnrsc.HostRoute;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-/**
- * Subnet HostRoute codec.
- */
-public final class HostRoutesCodec extends JsonCodec<HostRoute> {
-
- @Override
- public ObjectNode encode(HostRoute hostRoute, CodecContext context) {
- checkNotNull(hostRoute, "HostRoute cannot be null");
- ObjectNode result = context.mapper().createObjectNode()
- .put("nexthop", hostRoute.nexthop().toString())
- .put("destination", hostRoute.destination().toString());
- return result;
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc.web;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+import org.onosproject.vtnrsc.HostRoute;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+/**
+ * Subnet HostRoute codec.
+ */
+public final class HostRoutesCodec extends JsonCodec<HostRoute> {
+
+ @Override
+ public ObjectNode encode(HostRoute hostRoute, CodecContext context) {
+ checkNotNull(hostRoute, "HostRoute cannot be null");
+ ObjectNode result = context.mapper().createObjectNode()
+ .put("nexthop", hostRoute.nexthop().toString())
+ .put("destination", hostRoute.destination().toString());
+ return result;
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/SecurityGroupCodec.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/SecurityGroupCodec.java
index 83bab6b1..c2ded196 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/SecurityGroupCodec.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/SecurityGroupCodec.java
@@ -1,39 +1,39 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc.web;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.onosproject.codec.CodecContext;
-import org.onosproject.codec.JsonCodec;
-import org.onosproject.vtnrsc.SecurityGroup;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-/**
- * Virtualport SecurityGroup codec.
- */
-public final class SecurityGroupCodec extends JsonCodec<SecurityGroup> {
-
- @Override
- public ObjectNode encode(SecurityGroup securGroup, CodecContext context) {
- checkNotNull(securGroup, "SecurityGroup cannot be null");
- ObjectNode result = context.mapper().createObjectNode()
- .put("security_group", securGroup.securityGroup());
- return result;
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc.web;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+import org.onosproject.vtnrsc.SecurityGroup;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+/**
+ * Virtualport SecurityGroup codec.
+ */
+public final class SecurityGroupCodec extends JsonCodec<SecurityGroup> {
+
+ @Override
+ public ObjectNode encode(SecurityGroup securGroup, CodecContext context) {
+ checkNotNull(securGroup, "SecurityGroup cannot be null");
+ ObjectNode result = context.mapper().createObjectNode()
+ .put("security_group", securGroup.securityGroup());
+ return result;
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/SubnetCodec.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/SubnetCodec.java
index afd561fe..122b75a9 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/SubnetCodec.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/SubnetCodec.java
@@ -1,53 +1,53 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc.web;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.onosproject.codec.CodecContext;
-import org.onosproject.codec.JsonCodec;
-import org.onosproject.vtnrsc.Subnet;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-/**
- * Subnet JSON codec.
- */
-public final class SubnetCodec extends JsonCodec<Subnet> {
- @Override
- public ObjectNode encode(Subnet subnet, CodecContext context) {
- checkNotNull(subnet, "Subnet cannot be null");
- ObjectNode result = context.mapper().createObjectNode()
- .put("id", subnet.id().toString())
- .put("gateway_ip", subnet.gatewayIp().toString())
- .put("network_id", subnet.networkId().toString())
- .put("name", subnet.subnetName().toString())
- .put("ip_version", subnet.ipVersion().toString())
- .put("cidr", subnet.cidr().toString())
- .put("shared", subnet.shared())
- .put("enabled_dchp", subnet.dhcpEnabled())
- .put("tenant_id", subnet.tenantId().toString())
- .put("ipv6_address_mode", subnet.ipV6AddressMode() == null ? null
- : subnet.ipV6AddressMode().toString())
- .put("ipv6_ra_mode", subnet.ipV6RaMode() == null ? null
- : subnet.ipV6RaMode().toString());
- result.set("allocation_pools", new AllocationPoolsCodec().encode(subnet
- .allocationPools(), context));
- result.set("host_routes",
- new HostRoutesCodec().encode(subnet.hostRoutes(), context));
- return result;
- }
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc.web;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+import org.onosproject.vtnrsc.Subnet;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+/**
+ * Subnet JSON codec.
+ */
+public final class SubnetCodec extends JsonCodec<Subnet> {
+ @Override
+ public ObjectNode encode(Subnet subnet, CodecContext context) {
+ checkNotNull(subnet, "Subnet cannot be null");
+ ObjectNode result = context.mapper().createObjectNode()
+ .put("id", subnet.id().toString())
+ .put("gateway_ip", subnet.gatewayIp().toString())
+ .put("network_id", subnet.networkId().toString())
+ .put("name", subnet.subnetName())
+ .put("ip_version", subnet.ipVersion().toString())
+ .put("cidr", subnet.cidr().toString())
+ .put("shared", subnet.shared())
+ .put("enabled_dchp", subnet.dhcpEnabled())
+ .put("tenant_id", subnet.tenantId().toString())
+ .put("ipv6_address_mode", subnet.ipV6AddressMode() == null ? null
+ : subnet.ipV6AddressMode().toString())
+ .put("ipv6_ra_mode", subnet.ipV6RaMode() == null ? null
+ : subnet.ipV6RaMode().toString());
+ result.set("allocation_pools", new AllocationPoolsCodec().encode(subnet
+ .allocationPools(), context));
+ result.set("host_routes",
+ new HostRoutesCodec().encode(subnet.hostRoutes(), context));
+ return result;
+ }
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/TenantNetworkCodec.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/TenantNetworkCodec.java
index 07ae9f8e..48ba3b97 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/TenantNetworkCodec.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/TenantNetworkCodec.java
@@ -1,47 +1,47 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc.web;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.onosproject.codec.CodecContext;
-import org.onosproject.codec.JsonCodec;
-import org.onosproject.vtnrsc.TenantNetwork;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-/**
- * TenantNetwork JSON codec.
- */
-public final class TenantNetworkCodec extends JsonCodec<TenantNetwork> {
-
- @Override
- public ObjectNode encode(TenantNetwork network, CodecContext context) {
- checkNotNull(network, "Network cannot be null");
- ObjectNode result = context.mapper().createObjectNode()
- .put("id", network.id().toString())
- .put("name", network.name().toString())
- .put("admin_state_up", network.adminStateUp())
- .put("status", "" + network.state())
- .put("shared", network.shared())
- .put("tenant_id", network.tenantId().toString())
- .put("router:external", network.routerExternal())
- .put("provider:network_type", "" + network.type())
- .put("provider:physical_network", network.physicalNetwork().toString())
- .put("provider:segmentation_id", network.segmentationId().toString());
- return result;
- }
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc.web;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+import org.onosproject.vtnrsc.TenantNetwork;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+/**
+ * TenantNetwork JSON codec.
+ */
+public final class TenantNetworkCodec extends JsonCodec<TenantNetwork> {
+
+ @Override
+ public ObjectNode encode(TenantNetwork network, CodecContext context) {
+ checkNotNull(network, "Network cannot be null");
+ ObjectNode result = context.mapper().createObjectNode()
+ .put("id", network.id().toString())
+ .put("name", network.name())
+ .put("admin_state_up", network.adminStateUp())
+ .put("status", "" + network.state())
+ .put("shared", network.shared())
+ .put("tenant_id", network.tenantId().toString())
+ .put("router:external", network.routerExternal())
+ .put("provider:network_type", "" + network.type())
+ .put("provider:physical_network", network.physicalNetwork().toString())
+ .put("provider:segmentation_id", network.segmentationId().toString());
+ return result;
+ }
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/VirtualPortCodec.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/VirtualPortCodec.java
index aa3c0c73..e57d56bc 100644
--- a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/VirtualPortCodec.java
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/VirtualPortCodec.java
@@ -1,57 +1,57 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnrsc.web;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.onosproject.codec.CodecContext;
-import org.onosproject.codec.JsonCodec;
-import org.onosproject.vtnrsc.VirtualPort;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-/**
- * VirtualPort JSON codec.
- */
-public final class VirtualPortCodec extends JsonCodec<VirtualPort> {
- @Override
- public ObjectNode encode(VirtualPort vPort, CodecContext context) {
- checkNotNull(vPort, "VPort cannot be null");
- ObjectNode result = context
- .mapper()
- .createObjectNode()
- .put("id", vPort.portId().toString())
- .put("network_id", vPort.networkId().toString())
- .put("admin_state_up", vPort.adminStateUp())
- .put("name", vPort.name().toString())
- .put("status", vPort.state().toString())
- .put("mac_address", vPort.macAddress().toString())
- .put("tenant_id", vPort.tenantId().toString())
- .put("device_id", vPort.deviceId().toString())
- .put("device_owner", vPort.deviceOwner().toString())
- .put("binding:vnic_type", vPort.bindingVnicType().toString())
- .put("binding:Vif_type", vPort.bindingVifType().toString())
- .put("binding:host_id", vPort.bindingHostId().toString())
- .put("binding:vif_details", vPort.bindingVifDetails().toString());
- result.set("allowed_address_pairs", new AllowedAddressPairCodec().encode(
- vPort.allowedAddressPairs(), context));
- result.set("fixed_ips", new FixedIpCodec().encode(
- vPort.fixedIps(), context));
- result.set("security_groups", new SecurityGroupCodec().encode(
- vPort.securityGroups(), context));
- return result;
- }
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnrsc.web;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+import org.onosproject.vtnrsc.VirtualPort;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+/**
+ * VirtualPort JSON codec.
+ */
+public final class VirtualPortCodec extends JsonCodec<VirtualPort> {
+ @Override
+ public ObjectNode encode(VirtualPort vPort, CodecContext context) {
+ checkNotNull(vPort, "VPort cannot be null");
+ ObjectNode result = context
+ .mapper()
+ .createObjectNode()
+ .put("id", vPort.portId().toString())
+ .put("network_id", vPort.networkId().toString())
+ .put("admin_state_up", vPort.adminStateUp())
+ .put("name", vPort.name())
+ .put("status", vPort.state().toString())
+ .put("mac_address", vPort.macAddress().toString())
+ .put("tenant_id", vPort.tenantId().toString())
+ .put("device_id", vPort.deviceId().toString())
+ .put("device_owner", vPort.deviceOwner())
+ .put("binding:vnic_type", vPort.bindingVnicType())
+ .put("binding:Vif_type", vPort.bindingVifType())
+ .put("binding:host_id", vPort.bindingHostId().toString())
+ .put("binding:vif_details", vPort.bindingVifDetails());
+ result.set("allowed_address_pairs", new AllowedAddressPairCodec().encode(
+ vPort.allowedAddressPairs(), context));
+ result.set("fixed_ips", new FixedIpCodec().encode(
+ vPort.fixedIps(), context));
+ result.set("security_groups", new SecurityGroupCodec().encode(
+ vPort.securityGroups(), context));
+ return result;
+ }
+}
diff --git a/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/package-info.java b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/package-info.java
new file mode 100644
index 00000000..34636a9f
--- /dev/null
+++ b/framework/src/onos/apps/vtnrsc/src/main/java/org/onosproject/vtnrsc/web/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Codecs for virtual tenant objects.
+ */
+package org.onosproject.vtnrsc.web;
diff --git a/framework/src/onos/apps/vtnweb/pom.xml b/framework/src/onos/apps/vtnweb/pom.xml
index 974d3bf1..543bcfbb 100644
--- a/framework/src/onos/apps/vtnweb/pom.xml
+++ b/framework/src/onos/apps/vtnweb/pom.xml
@@ -1,76 +1,88 @@
<?xml version="1.0"?>
+<!--
+ ~ Copyright 2015 Open Networking Laboratory
+ ~
+ ~ 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.
+ -->
<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-apps</artifactId>
+ <version>1.4.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
- <artifactId>onos-app-vtnweb</artifactId>
- <packaging>bundle</packaging>
- <properties>
- <onos.app.name>org.onosproject.vtnweb</onos.app.name>
- <web.context>/onos/vtn</web.context>
- </properties>
+ <artifactId>onos-app-vtnweb</artifactId>
+ <packaging>bundle</packaging>
+ <properties>
+ <onos.app.name>org.onosproject.vtnweb</onos.app.name>
+ <web.context>/onos/vtn</web.context>
+ </properties>
- <dependencies>
- <dependency>
- <groupId>javax.ws.rs</groupId>
- <artifactId>jsr311-api</artifactId>
- <version>1.1.1</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-app-vtnrsc</artifactId>
- <version>${project.version}</version>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <_wab>src/main/webapp/</_wab>
- <Bundle-SymbolicName>
- ${project.groupId}.${project.artifactId}
- </Bundle-SymbolicName>
- <Import-Package>
- org.slf4j,
- org.osgi.framework,
- javax.ws.rs,
- javax.ws.rs.core,
- com.sun.jersey.api.core,
- com.sun.jersey.spi.container.servlet,
- com.sun.jersey.server.impl.container.servlet,
- com.fasterxml.jackson.databind,
- com.fasterxml.jackson.databind.node,
- com.fasterxml.jackson.core,
- org.apache.karaf.shell.commands,
- org.apache.commons.lang.math.*,
- com.google.common.*,
- org.onlab.packet.*,
- org.onlab.rest.*,
- org.onosproject.*,
- org.onlab.util.*,
- org.jboss.netty.util.*
- </Import-Package>
- <Web-ContextPath>${web.context}</Web-ContextPath>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
+ <dependencies>
+ <dependency>
+ <groupId>javax.ws.rs</groupId>
+ <artifactId>jsr311-api</artifactId>
+ <version>1.1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-app-vtnrsc</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <_wab>src/main/webapp/</_wab>
+ <Bundle-SymbolicName>
+ ${project.groupId}.${project.artifactId}
+ </Bundle-SymbolicName>
+ <Import-Package>
+ org.slf4j,
+ org.osgi.framework,
+ javax.ws.rs,
+ javax.ws.rs.core,
+ com.sun.jersey.api.core,
+ com.sun.jersey.spi.container.servlet,
+ com.sun.jersey.server.impl.container.servlet,
+ com.fasterxml.jackson.databind,
+ com.fasterxml.jackson.databind.node,
+ com.fasterxml.jackson.core,
+ org.apache.karaf.shell.commands,
+ org.apache.commons.lang.math.*,
+ com.google.common.*,
+ org.onlab.packet.*,
+ org.onlab.rest.*,
+ org.onosproject.*,
+ org.onlab.util.*,
+ org.jboss.netty.util.*
+ </Import-Package>
+ <Web-ContextPath>${web.context}</Web-ContextPath>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
</project> \ No newline at end of file
diff --git a/framework/src/onos/apps/vtnweb/src/main/java/org/onosproject/vtnweb/resources/SubnetWebResource.java b/framework/src/onos/apps/vtnweb/src/main/java/org/onosproject/vtnweb/resources/SubnetWebResource.java
index c46af6ef..3979e1e3 100644
--- a/framework/src/onos/apps/vtnweb/src/main/java/org/onosproject/vtnweb/resources/SubnetWebResource.java
+++ b/framework/src/onos/apps/vtnweb/src/main/java/org/onosproject/vtnweb/resources/SubnetWebResource.java
@@ -1,365 +1,365 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnweb.resources;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentMap;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.IpAddress.Version;
-import org.onlab.packet.IpPrefix;
-import org.onlab.util.ItemNotFoundException;
-import org.onosproject.rest.AbstractWebResource;
-import org.onosproject.vtnrsc.AllocationPool;
-import org.onosproject.vtnrsc.DefaultAllocationPool;
-import org.onosproject.vtnrsc.DefaultHostRoute;
-import org.onosproject.vtnrsc.DefaultSubnet;
-import org.onosproject.vtnrsc.HostRoute;
-import org.onosproject.vtnrsc.Subnet;
-import org.onosproject.vtnrsc.SubnetId;
-import org.onosproject.vtnrsc.TenantId;
-import org.onosproject.vtnrsc.TenantNetworkId;
-import org.onosproject.vtnrsc.Subnet.Mode;
-import org.onosproject.vtnrsc.subnet.SubnetService;
-import org.onosproject.vtnrsc.web.SubnetCodec;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
-@Path("subnets")
-public class SubnetWebResource extends AbstractWebResource {
- private final Logger log = LoggerFactory.getLogger(SubnetWebResource.class);
- public static final String SUBNET_NOT_CREATE = "Subnets is failed to create!";
- public static final String SUBNET_NOT_FOUND = "Subnets is failed to update!";
- public static final String JSON_NOT_NULL = "JsonNode can not be null";
-
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- public Response listSubnets() {
- Iterable<Subnet> subnets = get(SubnetService.class).getSubnets();
- ObjectNode result = new ObjectMapper().createObjectNode();
- result.set("subnets", new SubnetCodec().encode(subnets, this));
- return ok(result.toString()).build();
- }
-
- @GET
- @Path("{subnetUUID}")
- @Produces(MediaType.APPLICATION_JSON)
- public Response getSubnet(@PathParam("subnetUUID") String id) {
-
- if (!get(SubnetService.class).exists(SubnetId.subnetId(id))) {
- return ok("The subnet does not exists").build();
- }
- Subnet sub = nullIsNotFound(get(SubnetService.class)
- .getSubnet(SubnetId.subnetId(id)),
- SUBNET_NOT_FOUND);
-
- ObjectNode result = new ObjectMapper().createObjectNode();
- result.set("subnet", new SubnetCodec().encode(sub, this));
- return ok(result.toString()).build();
- }
-
- @POST
- @Produces(MediaType.APPLICATION_JSON)
- @Consumes(MediaType.APPLICATION_JSON)
- public Response createSubnet(final InputStream input) {
-
- try {
- ObjectMapper mapper = new ObjectMapper();
- JsonNode subnode = mapper.readTree(input);
- Iterable<Subnet> subnets = createOrUpdateByInputStream(subnode);
- Boolean result = nullIsNotFound((get(SubnetService.class)
- .createSubnets(subnets)),
- SUBNET_NOT_CREATE);
-
- if (!result) {
- return Response.status(204).entity(SUBNET_NOT_CREATE).build();
- }
- return Response.status(202).entity(result.toString()).build();
- } catch (Exception e) {
- return Response.status(INTERNAL_SERVER_ERROR).entity(e.toString())
- .build();
- }
- }
-
- @PUT
- @Path("{subnetUUID}")
- @Produces(MediaType.APPLICATION_JSON)
- @Consumes(MediaType.APPLICATION_JSON)
- public Response updateSubnet(@PathParam("id") String id,
- final InputStream input) {
- try {
- ObjectMapper mapper = new ObjectMapper();
- JsonNode subnode = mapper.readTree(input);
- Iterable<Subnet> subnets = createOrUpdateByInputStream(subnode);
- Boolean result = nullIsNotFound(get(SubnetService.class)
- .updateSubnets(subnets), SUBNET_NOT_FOUND);
- if (!result) {
- return Response.status(204).entity(SUBNET_NOT_FOUND).build();
- }
- return Response.status(203).entity(result.toString()).build();
- } catch (Exception e) {
- return Response.status(INTERNAL_SERVER_ERROR).entity(e.toString())
- .build();
- }
- }
-
- @Path("{subnetUUID}")
- @DELETE
- public Response deleteSingleSubnet(@PathParam("subnetUUID") String id)
- throws IOException {
- try {
- SubnetId subId = SubnetId.subnetId(id);
- Set<SubnetId> subIds = new HashSet<SubnetId>();
- subIds.add(subId);
- get(SubnetService.class).removeSubnets(subIds);
- return Response.status(201).entity("SUCCESS").build();
- } catch (Exception e) {
- return Response.status(INTERNAL_SERVER_ERROR).entity(e.toString())
- .build();
- }
- }
-
- private Iterable<Subnet> createOrUpdateByInputStream(JsonNode subnode) {
- checkNotNull(subnode, JSON_NOT_NULL);
- Iterable<Subnet> subnets = null;
- JsonNode subnetNodes = subnode.get("subnets");
- if (subnetNodes == null) {
- subnetNodes = subnode.get("subnet");
- }
- log.debug("subnetNodes is {}", subnetNodes.toString());
- if (subnetNodes.isArray()) {
- subnets = changeJsonToSubs(subnetNodes);
- } else {
- subnets = changeJsonToSub(subnetNodes);
- }
- return subnets;
- }
-
- /**
- * Returns a collection of subnets from subnetNodes.
- *
- * @param subnetNodes the subnet json node
- * @return subnets a collection of subnets
- */
- public Iterable<Subnet> changeJsonToSubs(JsonNode subnetNodes) {
- checkNotNull(subnetNodes, JSON_NOT_NULL);
- Map<SubnetId, Subnet> subMap = new HashMap<SubnetId, Subnet>();
- for (JsonNode subnetNode : subnetNodes) {
- if (!subnetNode.hasNonNull("id")) {
- return null;
- }
- SubnetId id = SubnetId.subnetId(subnetNode.get("id").asText());
- String subnetName = subnetNode.get("name").asText();
- TenantId tenantId = TenantId
- .tenantId(subnetNode.get("tenant_id").asText());
- TenantNetworkId networkId = TenantNetworkId
- .networkId(subnetNode.get("network_id").asText());
- Version ipVersion = Version
- .valueOf(subnetNode.get("ip_version").asText());
- IpPrefix cidr = IpPrefix.valueOf(subnetNode.get("cidr").asText());
- IpAddress gatewayIp = IpAddress
- .valueOf(subnetNode.get("gateway_ip").asText());
- Boolean dhcpEnabled = subnetNode.get("enable_dhcp").asBoolean();
- Boolean shared = subnetNode.get("shared").asBoolean();
- JsonNode hostRoutes = subnetNode.get("host_routes");
- Iterable<HostRoute> hostRoutesIt = jsonNodeToHostRoutes(hostRoutes);
- JsonNode allocationPools = subnetNode.get("allocation_pools");
- Iterable<AllocationPool> allocationPoolsIt = jsonNodeToAllocationPools(allocationPools);
- Mode ipV6AddressMode = Mode
- .valueOf(subnetNode.get("ipv6_address_mode").asText());
- Mode ipV6RaMode = Mode
- .valueOf(subnetNode.get("ipv6_ra_mode").asText());
- Subnet subnet = new DefaultSubnet(id, subnetName, networkId,
- tenantId, ipVersion, cidr,
- gatewayIp, dhcpEnabled, shared,
- Sets.newHashSet(hostRoutesIt), ipV6AddressMode,
- ipV6RaMode, Sets.newHashSet(allocationPoolsIt));
- subMap.put(id, subnet);
- }
- return Collections.unmodifiableCollection(subMap.values());
- }
-
- /**
- * Returns a collection of subnets from subnetNodes.
- *
- * @param subnetNodes the subnet json node
- * @return subnets a collection of subnets
- */
- public Iterable<Subnet> changeJsonToSub(JsonNode subnetNodes) {
- checkNotNull(subnetNodes, JSON_NOT_NULL);
- checkArgument(subnetNodes.get("enable_dhcp").isBoolean(), "enable_dhcp should be boolean");
- checkArgument(subnetNodes.get("shared").isBoolean(), "shared should be boolean");
- Map<SubnetId, Subnet> subMap = new HashMap<SubnetId, Subnet>();
- if (!subnetNodes.hasNonNull("id")) {
- return null;
- }
- SubnetId id = SubnetId.subnetId(subnetNodes.get("id").asText());
- String subnetName = subnetNodes.get("name").asText();
- TenantId tenantId = TenantId
- .tenantId(subnetNodes.get("tenant_id").asText());
- TenantNetworkId networkId = TenantNetworkId
- .networkId(subnetNodes.get("network_id").asText());
- String version = subnetNodes.get("ip_version").asText();
- Version ipVersion;
- switch (version) {
- case "4":
- ipVersion = Version.INET;
- break;
- case "6":
- ipVersion = Version.INET;
- break;
- default:
- throw new IllegalArgumentException("ipVersion should be 4 or 6.");
- }
-
- IpPrefix cidr = IpPrefix.valueOf(subnetNodes.get("cidr").asText());
- IpAddress gatewayIp = IpAddress
- .valueOf(subnetNodes.get("gateway_ip").asText());
- Boolean dhcpEnabled = subnetNodes.get("enable_dhcp").asBoolean();
- Boolean shared = subnetNodes.get("shared").asBoolean();
- JsonNode hostRoutes = subnetNodes.get("host_routes");
- Iterable<HostRoute> hostRoutesIt = jsonNodeToHostRoutes(hostRoutes);
- JsonNode allocationPools = subnetNodes.get("allocation_pools");
- Iterable<AllocationPool> allocationPoolsIt = jsonNodeToAllocationPools(allocationPools);
-
- Mode ipV6AddressMode = getMode(subnetNodes.get("ipv6_address_mode")
- .asText());
- Mode ipV6RaMode = getMode(subnetNodes.get("ipv6_ra_mode").asText());
-
- Subnet subnet = new DefaultSubnet(id, subnetName, networkId, tenantId,
- ipVersion, cidr, gatewayIp,
- dhcpEnabled, shared, Sets.newHashSet(hostRoutesIt),
- ipV6AddressMode, ipV6RaMode,
- Sets.newHashSet(allocationPoolsIt));
- subMap.put(id, subnet);
- return Collections.unmodifiableCollection(subMap.values());
- }
-
- /**
- * Gets ipv6_address_mode or ipv6_ra_mode type.
- *
- * @param mode the String value in JsonNode
- * @return ipV6Mode Mode of the ipV6Mode
- */
- private Mode getMode(String mode) {
- Mode ipV6Mode;
- if (mode == null) {
- return null;
- }
- switch (mode) {
- case "dhcpv6-stateful":
- ipV6Mode = Mode.DHCPV6_STATEFUL;
- break;
- case "dhcpv6-stateless":
- ipV6Mode = Mode.DHCPV6_STATELESS;
- break;
- case "slaac":
- ipV6Mode = Mode.SLAAC;
- break;
- default:
- ipV6Mode = null;
- }
- return ipV6Mode;
- }
-
- /**
- * Changes JsonNode alocPools to a collection of the alocPools.
- *
- * @param allocationPools the allocationPools JsonNode
- * @return a collection of allocationPools
- */
- public Iterable<AllocationPool> jsonNodeToAllocationPools(JsonNode allocationPools) {
- checkNotNull(allocationPools, JSON_NOT_NULL);
- ConcurrentMap<Integer, AllocationPool> alocplMaps = Maps
- .newConcurrentMap();
- Integer i = 0;
- for (JsonNode node : allocationPools) {
- IpAddress startIp = IpAddress.valueOf(node.get("start").asText());
- IpAddress endIp = IpAddress.valueOf(node.get("end").asText());
- AllocationPool alocPls = new DefaultAllocationPool(startIp, endIp);
- alocplMaps.putIfAbsent(i, alocPls);
- i++;
- }
- return Collections.unmodifiableCollection(alocplMaps.values());
- }
-
- /**
- * Changes hostRoutes JsonNode to a collection of the hostRoutes.
- *
- * @param hostRoutes the hostRoutes json node
- * @return a collection of hostRoutes
- */
- public Iterable<HostRoute> jsonNodeToHostRoutes(JsonNode hostRoutes) {
- checkNotNull(hostRoutes, JSON_NOT_NULL);
- ConcurrentMap<Integer, HostRoute> hostRouteMaps = Maps
- .newConcurrentMap();
- Integer i = 0;
- for (JsonNode node : hostRoutes) {
- IpAddress nexthop = IpAddress.valueOf(node.get("nexthop").asText());
- IpPrefix destination = IpPrefix.valueOf(node.get("destination")
- .asText());
- HostRoute hostRoute = new DefaultHostRoute(nexthop, destination);
- hostRouteMaps.putIfAbsent(i, hostRoute);
- i++;
- }
- return Collections.unmodifiableCollection(hostRouteMaps.values());
- }
-
- /**
- * Returns the specified item if that items is null; otherwise throws not
- * found exception.
- *
- * @param item item to check
- * @param <T> item type
- * @param message not found message
- * @return item if not null
- * @throws org.onlab.util.ItemNotFoundException if item is null
- */
- protected <T> T nullIsNotFound(T item, String message) {
- if (item == null) {
- throw new ItemNotFoundException(message);
- }
- return item;
- }
-
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnweb.resources;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentMap;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.IpAddress.Version;
+import org.onlab.packet.IpPrefix;
+import org.onlab.util.ItemNotFoundException;
+import org.onosproject.rest.AbstractWebResource;
+import org.onosproject.vtnrsc.AllocationPool;
+import org.onosproject.vtnrsc.DefaultAllocationPool;
+import org.onosproject.vtnrsc.DefaultHostRoute;
+import org.onosproject.vtnrsc.DefaultSubnet;
+import org.onosproject.vtnrsc.HostRoute;
+import org.onosproject.vtnrsc.Subnet;
+import org.onosproject.vtnrsc.SubnetId;
+import org.onosproject.vtnrsc.TenantId;
+import org.onosproject.vtnrsc.TenantNetworkId;
+import org.onosproject.vtnrsc.Subnet.Mode;
+import org.onosproject.vtnrsc.subnet.SubnetService;
+import org.onosproject.vtnrsc.web.SubnetCodec;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+
+@Path("subnets")
+public class SubnetWebResource extends AbstractWebResource {
+ private final Logger log = LoggerFactory.getLogger(SubnetWebResource.class);
+ public static final String SUBNET_NOT_CREATE = "Subnets is failed to create!";
+ public static final String SUBNET_NOT_FOUND = "Subnets is failed to update!";
+ public static final String JSON_NOT_NULL = "JsonNode can not be null";
+
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response listSubnets() {
+ Iterable<Subnet> subnets = get(SubnetService.class).getSubnets();
+ ObjectNode result = new ObjectMapper().createObjectNode();
+ result.set("subnets", new SubnetCodec().encode(subnets, this));
+ return ok(result.toString()).build();
+ }
+
+ @GET
+ @Path("{subnetUUID}")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getSubnet(@PathParam("subnetUUID") String id) {
+
+ if (!get(SubnetService.class).exists(SubnetId.subnetId(id))) {
+ return ok("The subnet does not exists").build();
+ }
+ Subnet sub = nullIsNotFound(get(SubnetService.class)
+ .getSubnet(SubnetId.subnetId(id)),
+ SUBNET_NOT_FOUND);
+
+ ObjectNode result = new ObjectMapper().createObjectNode();
+ result.set("subnet", new SubnetCodec().encode(sub, this));
+ return ok(result.toString()).build();
+ }
+
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Response createSubnet(final InputStream input) {
+
+ try {
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode subnode = mapper.readTree(input);
+ Iterable<Subnet> subnets = createOrUpdateByInputStream(subnode);
+ Boolean result = nullIsNotFound((get(SubnetService.class)
+ .createSubnets(subnets)),
+ SUBNET_NOT_CREATE);
+
+ if (!result) {
+ return Response.status(204).entity(SUBNET_NOT_CREATE).build();
+ }
+ return Response.status(202).entity(result.toString()).build();
+ } catch (Exception e) {
+ return Response.status(INTERNAL_SERVER_ERROR).entity(e.toString())
+ .build();
+ }
+ }
+
+ @PUT
+ @Path("{subnetUUID}")
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Response updateSubnet(@PathParam("id") String id,
+ final InputStream input) {
+ try {
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode subnode = mapper.readTree(input);
+ Iterable<Subnet> subnets = createOrUpdateByInputStream(subnode);
+ Boolean result = nullIsNotFound(get(SubnetService.class)
+ .updateSubnets(subnets), SUBNET_NOT_FOUND);
+ if (!result) {
+ return Response.status(204).entity(SUBNET_NOT_FOUND).build();
+ }
+ return Response.status(203).entity(result.toString()).build();
+ } catch (Exception e) {
+ return Response.status(INTERNAL_SERVER_ERROR).entity(e.toString())
+ .build();
+ }
+ }
+
+ @Path("{subnetUUID}")
+ @DELETE
+ public Response deleteSingleSubnet(@PathParam("subnetUUID") String id)
+ throws IOException {
+ try {
+ SubnetId subId = SubnetId.subnetId(id);
+ Set<SubnetId> subIds = new HashSet<>();
+ subIds.add(subId);
+ get(SubnetService.class).removeSubnets(subIds);
+ return Response.status(201).entity("SUCCESS").build();
+ } catch (Exception e) {
+ return Response.status(INTERNAL_SERVER_ERROR).entity(e.toString())
+ .build();
+ }
+ }
+
+ private Iterable<Subnet> createOrUpdateByInputStream(JsonNode subnode) {
+ checkNotNull(subnode, JSON_NOT_NULL);
+ Iterable<Subnet> subnets = null;
+ JsonNode subnetNodes = subnode.get("subnets");
+ if (subnetNodes == null) {
+ subnetNodes = subnode.get("subnet");
+ }
+ log.debug("subnetNodes is {}", subnetNodes.toString());
+ if (subnetNodes.isArray()) {
+ subnets = changeJsonToSubs(subnetNodes);
+ } else {
+ subnets = changeJsonToSub(subnetNodes);
+ }
+ return subnets;
+ }
+
+ /**
+ * Returns a collection of subnets from subnetNodes.
+ *
+ * @param subnetNodes the subnet json node
+ * @return subnets a collection of subnets
+ */
+ public Iterable<Subnet> changeJsonToSubs(JsonNode subnetNodes) {
+ checkNotNull(subnetNodes, JSON_NOT_NULL);
+ Map<SubnetId, Subnet> subMap = new HashMap<>();
+ for (JsonNode subnetNode : subnetNodes) {
+ if (!subnetNode.hasNonNull("id")) {
+ return null;
+ }
+ SubnetId id = SubnetId.subnetId(subnetNode.get("id").asText());
+ String subnetName = subnetNode.get("name").asText();
+ TenantId tenantId = TenantId
+ .tenantId(subnetNode.get("tenant_id").asText());
+ TenantNetworkId networkId = TenantNetworkId
+ .networkId(subnetNode.get("network_id").asText());
+ Version ipVersion = Version
+ .valueOf(subnetNode.get("ip_version").asText());
+ IpPrefix cidr = IpPrefix.valueOf(subnetNode.get("cidr").asText());
+ IpAddress gatewayIp = IpAddress
+ .valueOf(subnetNode.get("gateway_ip").asText());
+ Boolean dhcpEnabled = subnetNode.get("enable_dhcp").asBoolean();
+ Boolean shared = subnetNode.get("shared").asBoolean();
+ JsonNode hostRoutes = subnetNode.get("host_routes");
+ Iterable<HostRoute> hostRoutesIt = jsonNodeToHostRoutes(hostRoutes);
+ JsonNode allocationPools = subnetNode.get("allocation_pools");
+ Iterable<AllocationPool> allocationPoolsIt = jsonNodeToAllocationPools(allocationPools);
+ Mode ipV6AddressMode = Mode
+ .valueOf(subnetNode.get("ipv6_address_mode").asText());
+ Mode ipV6RaMode = Mode
+ .valueOf(subnetNode.get("ipv6_ra_mode").asText());
+ Subnet subnet = new DefaultSubnet(id, subnetName, networkId,
+ tenantId, ipVersion, cidr,
+ gatewayIp, dhcpEnabled, shared,
+ Sets.newHashSet(hostRoutesIt), ipV6AddressMode,
+ ipV6RaMode, Sets.newHashSet(allocationPoolsIt));
+ subMap.put(id, subnet);
+ }
+ return Collections.unmodifiableCollection(subMap.values());
+ }
+
+ /**
+ * Returns a collection of subnets from subnetNodes.
+ *
+ * @param subnetNodes the subnet json node
+ * @return subnets a collection of subnets
+ */
+ public Iterable<Subnet> changeJsonToSub(JsonNode subnetNodes) {
+ checkNotNull(subnetNodes, JSON_NOT_NULL);
+ checkArgument(subnetNodes.get("enable_dhcp").isBoolean(), "enable_dhcp should be boolean");
+ checkArgument(subnetNodes.get("shared").isBoolean(), "shared should be boolean");
+ Map<SubnetId, Subnet> subMap = new HashMap<>();
+ if (!subnetNodes.hasNonNull("id")) {
+ return null;
+ }
+ SubnetId id = SubnetId.subnetId(subnetNodes.get("id").asText());
+ String subnetName = subnetNodes.get("name").asText();
+ TenantId tenantId = TenantId
+ .tenantId(subnetNodes.get("tenant_id").asText());
+ TenantNetworkId networkId = TenantNetworkId
+ .networkId(subnetNodes.get("network_id").asText());
+ String version = subnetNodes.get("ip_version").asText();
+ Version ipVersion;
+ switch (version) {
+ case "4":
+ ipVersion = Version.INET;
+ break;
+ case "6":
+ ipVersion = Version.INET;
+ break;
+ default:
+ throw new IllegalArgumentException("ipVersion should be 4 or 6.");
+ }
+
+ IpPrefix cidr = IpPrefix.valueOf(subnetNodes.get("cidr").asText());
+ IpAddress gatewayIp = IpAddress
+ .valueOf(subnetNodes.get("gateway_ip").asText());
+ Boolean dhcpEnabled = subnetNodes.get("enable_dhcp").asBoolean();
+ Boolean shared = subnetNodes.get("shared").asBoolean();
+ JsonNode hostRoutes = subnetNodes.get("host_routes");
+ Iterable<HostRoute> hostRoutesIt = jsonNodeToHostRoutes(hostRoutes);
+ JsonNode allocationPools = subnetNodes.get("allocation_pools");
+ Iterable<AllocationPool> allocationPoolsIt = jsonNodeToAllocationPools(allocationPools);
+
+ Mode ipV6AddressMode = getMode(subnetNodes.get("ipv6_address_mode")
+ .asText());
+ Mode ipV6RaMode = getMode(subnetNodes.get("ipv6_ra_mode").asText());
+
+ Subnet subnet = new DefaultSubnet(id, subnetName, networkId, tenantId,
+ ipVersion, cidr, gatewayIp,
+ dhcpEnabled, shared, Sets.newHashSet(hostRoutesIt),
+ ipV6AddressMode, ipV6RaMode,
+ Sets.newHashSet(allocationPoolsIt));
+ subMap.put(id, subnet);
+ return Collections.unmodifiableCollection(subMap.values());
+ }
+
+ /**
+ * Gets ipv6_address_mode or ipv6_ra_mode type.
+ *
+ * @param mode the String value in JsonNode
+ * @return ipV6Mode Mode of the ipV6Mode
+ */
+ private Mode getMode(String mode) {
+ Mode ipV6Mode;
+ if (mode == null) {
+ return null;
+ }
+ switch (mode) {
+ case "dhcpv6-stateful":
+ ipV6Mode = Mode.DHCPV6_STATEFUL;
+ break;
+ case "dhcpv6-stateless":
+ ipV6Mode = Mode.DHCPV6_STATELESS;
+ break;
+ case "slaac":
+ ipV6Mode = Mode.SLAAC;
+ break;
+ default:
+ ipV6Mode = null;
+ }
+ return ipV6Mode;
+ }
+
+ /**
+ * Changes JsonNode alocPools to a collection of the alocPools.
+ *
+ * @param allocationPools the allocationPools JsonNode
+ * @return a collection of allocationPools
+ */
+ public Iterable<AllocationPool> jsonNodeToAllocationPools(JsonNode allocationPools) {
+ checkNotNull(allocationPools, JSON_NOT_NULL);
+ ConcurrentMap<Integer, AllocationPool> alocplMaps = Maps
+ .newConcurrentMap();
+ Integer i = 0;
+ for (JsonNode node : allocationPools) {
+ IpAddress startIp = IpAddress.valueOf(node.get("start").asText());
+ IpAddress endIp = IpAddress.valueOf(node.get("end").asText());
+ AllocationPool alocPls = new DefaultAllocationPool(startIp, endIp);
+ alocplMaps.putIfAbsent(i, alocPls);
+ i++;
+ }
+ return Collections.unmodifiableCollection(alocplMaps.values());
+ }
+
+ /**
+ * Changes hostRoutes JsonNode to a collection of the hostRoutes.
+ *
+ * @param hostRoutes the hostRoutes json node
+ * @return a collection of hostRoutes
+ */
+ public Iterable<HostRoute> jsonNodeToHostRoutes(JsonNode hostRoutes) {
+ checkNotNull(hostRoutes, JSON_NOT_NULL);
+ ConcurrentMap<Integer, HostRoute> hostRouteMaps = Maps
+ .newConcurrentMap();
+ Integer i = 0;
+ for (JsonNode node : hostRoutes) {
+ IpAddress nexthop = IpAddress.valueOf(node.get("nexthop").asText());
+ IpPrefix destination = IpPrefix.valueOf(node.get("destination")
+ .asText());
+ HostRoute hostRoute = new DefaultHostRoute(nexthop, destination);
+ hostRouteMaps.putIfAbsent(i, hostRoute);
+ i++;
+ }
+ return Collections.unmodifiableCollection(hostRouteMaps.values());
+ }
+
+ /**
+ * Returns the specified item if that items is null; otherwise throws not
+ * found exception.
+ *
+ * @param item item to check
+ * @param <T> item type
+ * @param message not found message
+ * @return item if not null
+ * @throws org.onlab.util.ItemNotFoundException if item is null
+ */
+ protected <T> T nullIsNotFound(T item, String message) {
+ if (item == null) {
+ throw new ItemNotFoundException(message);
+ }
+ return item;
+ }
+
+}
diff --git a/framework/src/onos/apps/vtnweb/src/main/java/org/onosproject/vtnweb/resources/TenantNetworkWebResource.java b/framework/src/onos/apps/vtnweb/src/main/java/org/onosproject/vtnweb/resources/TenantNetworkWebResource.java
index 7a0d43d2..b3888db1 100644
--- a/framework/src/onos/apps/vtnweb/src/main/java/org/onosproject/vtnweb/resources/TenantNetworkWebResource.java
+++ b/framework/src/onos/apps/vtnweb/src/main/java/org/onosproject/vtnweb/resources/TenantNetworkWebResource.java
@@ -1,372 +1,371 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnweb.resources;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkArgument;
-import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;
-import static javax.ws.rs.core.Response.Status.OK;
-
-import java.io.InputStream;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.concurrent.ConcurrentMap;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.onlab.util.ItemNotFoundException;
-import org.onosproject.rest.AbstractWebResource;
-import org.onosproject.vtnrsc.DefaultTenantNetwork;
-import org.onosproject.vtnrsc.PhysicalNetwork;
-import org.onosproject.vtnrsc.SegmentationId;
-import org.onosproject.vtnrsc.TenantId;
-import org.onosproject.vtnrsc.TenantNetwork;
-import org.onosproject.vtnrsc.TenantNetworkId;
-import org.onosproject.vtnrsc.TenantNetwork.State;
-import org.onosproject.vtnrsc.TenantNetwork.Type;
-import org.onosproject.vtnrsc.tenantnetwork.TenantNetworkService;
-import org.onosproject.vtnrsc.web.TenantNetworkCodec;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.Maps;
-
-/**
- * REST resource for interacting with the inventory of networks.
- */
-@Path("networks")
-public class TenantNetworkWebResource extends AbstractWebResource {
- public static final String NETWORK_NOT_FOUND = "Network is not found";
- public static final String NETWORK_ID_EXIST = "Network id is existed";
- public static final String NETWORK_ID_NOT_EXIST = "Network id is not existed";
- public static final String CREATE_NETWORK = "create network";
- public static final String UPDATE_NETWORK = "update network";
- public static final String DELETE_NETWORK = "delete network";
- public static final String JSON_NOT_NULL = "JsonNode can not be null";
-
- protected static final Logger log = LoggerFactory
- .getLogger(TenantNetworkWebResource.class);
- private final ConcurrentMap<TenantNetworkId, TenantNetwork> networksMap = Maps
- .newConcurrentMap();
-
- @GET
- @Produces({ MediaType.APPLICATION_JSON })
- public Response getNetworks(@QueryParam("id") String queryId,
- @QueryParam("name") String queryName,
- @QueryParam("admin_state_up") String queryadminStateUp,
- @QueryParam("status") String querystate,
- @QueryParam("shared") String queryshared,
- @QueryParam("tenant_id") String querytenantId,
- @QueryParam("router:external") String routerExternal,
- @QueryParam("provider:network_type") String type,
- @QueryParam("provider:physical_network") String physicalNetwork,
- @QueryParam("provider:segmentation_id") String segmentationId) {
- Iterable<TenantNetwork> networks = get(TenantNetworkService.class)
- .getNetworks();
- Iterator<TenantNetwork> networkors = networks.iterator();
- while (networkors.hasNext()) {
- TenantNetwork network = networkors.next();
- if ((queryId == null || queryId.equals(network.id().toString()))
- && (queryName == null || queryName.equals(network.name()
- .toString()))
- && (queryadminStateUp == null || queryadminStateUp
- .equals(network.adminStateUp()))
- && (querystate == null || querystate.equals(network.state()
- .toString()))
- && (queryshared == null || queryshared.equals(network
- .shared()))
- && (querytenantId == null || querytenantId.equals(network
- .tenantId().toString()))
- && (routerExternal == null || routerExternal.equals(network
- .routerExternal()))
- && (type == null || type.equals(network.type()))
- && (physicalNetwork == null || physicalNetwork
- .equals(network.physicalNetwork()))
- && (segmentationId == null || segmentationId.equals(network
- .segmentationId()))) {
- networksMap.putIfAbsent(network.id(), network);
- }
- }
- networks = Collections.unmodifiableCollection(networksMap.values());
- ObjectNode result = new ObjectMapper().createObjectNode();
- result.set("networks", new TenantNetworkCodec().encode(networks, this));
-
- return ok(result.toString()).build();
- }
-
- private State isState(String state) {
- if (state.equals("ACTIVE")) {
- return TenantNetwork.State.ACTIVE;
- } else if (state.equals("BUILD")) {
- return TenantNetwork.State.BUILD;
- } else if (state.equals("DOWN")) {
- return TenantNetwork.State.DOWN;
- } else if (state.equals("ERROR")) {
- return TenantNetwork.State.ERROR;
- } else {
- return null;
- }
- }
-
- private Type isType(String type) {
- if (type.equals("LOCAL")) {
- return TenantNetwork.Type.LOCAL;
- } else {
- return null;
- }
- }
-
- @GET
- @Path("{id}")
- @Produces({ MediaType.APPLICATION_JSON })
- public Response getNetwork(@PathParam("id") String id) {
-
- if (!get(TenantNetworkService.class).exists(TenantNetworkId
- .networkId(id))) {
- return ok("The tenantNetwork does not exists").build();
- }
- TenantNetwork network = nullIsNotFound(get(TenantNetworkService.class)
- .getNetwork(TenantNetworkId.networkId(id)), NETWORK_NOT_FOUND);
- ObjectNode result = new ObjectMapper().createObjectNode();
- result.set("network", new TenantNetworkCodec().encode(network, this));
-
- return ok(result.toString()).build();
-
- }
-
- @POST
- @Produces(MediaType.APPLICATION_JSON)
- @Consumes(MediaType.APPLICATION_JSON)
- public Response createNetworks(InputStream input) {
- try {
- ObjectMapper mapper = new ObjectMapper();
- JsonNode cfg = mapper.readTree(input);
- JsonNode nodes = null;
- Iterable<TenantNetwork> networks = null;
- if (cfg.get("network") != null) {
- nodes = cfg.get("network");
- if (nodes.isArray()) {
- networks = changeJson2objs(nodes);
- } else {
- networks = changeJson2obj(CREATE_NETWORK, null, nodes);
- }
- } else if (cfg.get("networks") != null) {
- nodes = cfg.get("networks");
- networks = changeJson2objs(nodes);
- }
- Boolean issuccess = nullIsNotFound((get(TenantNetworkService.class)
- .createNetworks(networks)),
- NETWORK_NOT_FOUND);
-
- if (!issuccess) {
- return Response.status(INTERNAL_SERVER_ERROR)
- .entity(NETWORK_ID_EXIST).build();
- }
- return Response.status(OK).entity(issuccess.toString()).build();
- } catch (Exception e) {
- log.error("Creates tenantNetwork exception {}.", e.toString());
- return Response.status(INTERNAL_SERVER_ERROR).entity(e.toString())
- .build();
- }
- }
-
- @PUT
- @Path("{id}")
- @Produces(MediaType.APPLICATION_JSON)
- @Consumes(MediaType.APPLICATION_JSON)
- public Response updateNetworks(@PathParam("id") String id, InputStream input) {
- try {
- ObjectMapper mapper = new ObjectMapper();
- JsonNode cfg = mapper.readTree(input);
- JsonNode nodes = null;
- Iterable<TenantNetwork> networks = null;
- if (cfg.get("network") != null) {
- nodes = cfg.get("network");
- if (nodes.isArray()) {
- networks = changeJson2objs(nodes);
- } else {
- networks = changeJson2obj(UPDATE_NETWORK,
- TenantNetworkId.networkId(id),
- nodes);
- }
- } else if (cfg.get("networks") != null) {
- nodes = cfg.get("networks");
- networks = changeJson2objs(nodes);
- }
- Boolean issuccess = nullIsNotFound((get(TenantNetworkService.class)
- .updateNetworks(networks)),
- NETWORK_NOT_FOUND);
- if (!issuccess) {
- return Response.status(INTERNAL_SERVER_ERROR)
- .entity(NETWORK_ID_NOT_EXIST).build();
- }
- return Response.status(OK).entity(issuccess.toString()).build();
- } catch (Exception e) {
- log.error("Updates tenantNetwork failed because of exception {}.",
- e.toString());
- return Response.status(INTERNAL_SERVER_ERROR).entity(e.toString())
- .build();
- }
- }
-
- @DELETE
- @Path("{id}")
- public Response deleteNetworks(@PathParam("id") String id) {
- log.debug("Deletes network by identifier {}.", id);
- Set<TenantNetworkId> networkSet = new HashSet<TenantNetworkId>();
- networkSet.add(TenantNetworkId.networkId(id));
- Boolean issuccess = nullIsNotFound(get(TenantNetworkService.class)
- .removeNetworks(networkSet), NETWORK_NOT_FOUND);
- if (!issuccess) {
- log.debug("Network identifier {} is not existed", id);
- return Response.status(INTERNAL_SERVER_ERROR)
- .entity(NETWORK_ID_NOT_EXIST).build();
- }
- return Response.status(OK).entity(issuccess.toString()).build();
- }
-
- /**
- * Returns a collection of tenantNetworks.
- *
- * @param flag the flag
- * @param networkId network identifier
- * @param node the network json node
- * @return a collection of tenantNetworks
- */
- public Iterable<TenantNetwork> changeJson2obj(String flag,
- TenantNetworkId networkId,
- JsonNode node) {
- checkNotNull(node, JSON_NOT_NULL);
- TenantNetwork network = null;
- ConcurrentMap<TenantNetworkId, TenantNetwork> networksMap = Maps
- .newConcurrentMap();
- if (node != null) {
- checkArgument(node.get("admin_state_up").isBoolean(), "admin_state_up should be boolean");
- checkArgument(node.get("shared").isBoolean(), "shared should be boolean");
- checkArgument(node.get("router:external").isBoolean(), "router:external should be boolean");
- String name = node.get("name").asText();
- boolean adminStateUp = node.get("admin_state_up").asBoolean();
- String state = node.get("status").asText();
- boolean shared = node.get("shared").asBoolean();
- String tenantId = node.get("tenant_id").asText();
- boolean routerExternal = node.get("router:external").asBoolean();
- String type = node.get("provider:network_type").asText();
- String physicalNetwork = node.get("provider:physical_network")
- .asText();
- String segmentationId = node.get("provider:segmentation_id")
- .asText();
- TenantNetworkId id = null;
- if (flag == CREATE_NETWORK) {
- id = TenantNetworkId.networkId(node.get("id").asText());
- } else if (flag == UPDATE_NETWORK) {
- id = networkId;
- }
- network = new DefaultTenantNetwork(
- id,
- name,
- adminStateUp,
- isState(state),
- shared,
- TenantId.tenantId(tenantId),
- routerExternal,
- isType(type),
- PhysicalNetwork
- .physicalNetwork(physicalNetwork),
- SegmentationId
- .segmentationId(segmentationId));
- networksMap.putIfAbsent(id, network);
- }
- return Collections.unmodifiableCollection(networksMap.values());
- }
-
- /**
- * Returns a collection of tenantNetworks.
- *
- * @param nodes the network jsonnodes
- * @return a collection of tenantNetworks
- */
- public Iterable<TenantNetwork> changeJson2objs(JsonNode nodes) {
- checkNotNull(nodes, JSON_NOT_NULL);
- TenantNetwork network = null;
- ConcurrentMap<TenantNetworkId, TenantNetwork> networksMap = Maps
- .newConcurrentMap();
- if (nodes != null) {
- for (JsonNode node : nodes) {
- String id = node.get("id").asText();
- String name = node.get("name").asText();
- boolean adminStateUp = node.get("admin_state_up").asBoolean();
- String state = node.get("status").asText();
- boolean shared = node.get("shared").asBoolean();
- String tenantId = node.get("tenant_id").asText();
- boolean routerExternal = node.get("router:external")
- .asBoolean();
- String type = node.get("provider:network_type").asText();
- String physicalNetwork = node.get("provider:physical_network")
- .asText();
- String segmentationId = node.get("provider:segmentation_id")
- .asText();
- network = new DefaultTenantNetwork(
- TenantNetworkId
- .networkId(id),
- name,
- adminStateUp,
- isState(state),
- shared,
- TenantId.tenantId(tenantId),
- routerExternal,
- isType(type),
- PhysicalNetwork
- .physicalNetwork(physicalNetwork),
- SegmentationId
- .segmentationId(segmentationId));
- networksMap.putIfAbsent(TenantNetworkId.networkId(id), network);
- }
- }
- return Collections.unmodifiableCollection(networksMap.values());
- }
-
- /**
- * Returns the specified item if that items is null; otherwise throws not
- * found exception.
- *
- * @param item item to check
- * @param <T> item type
- * @param message not found message
- * @return item if not null
- * @throws org.onlab.util.ItemNotFoundException if item is null
- */
- protected <T> T nullIsNotFound(T item, String message) {
- if (item == null) {
- throw new ItemNotFoundException(message);
- }
- return item;
- }
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnweb.resources;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkArgument;
+import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;
+import static javax.ws.rs.core.Response.Status.OK;
+
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.concurrent.ConcurrentMap;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.onlab.util.ItemNotFoundException;
+import org.onosproject.rest.AbstractWebResource;
+import org.onosproject.vtnrsc.DefaultTenantNetwork;
+import org.onosproject.vtnrsc.PhysicalNetwork;
+import org.onosproject.vtnrsc.SegmentationId;
+import org.onosproject.vtnrsc.TenantId;
+import org.onosproject.vtnrsc.TenantNetwork;
+import org.onosproject.vtnrsc.TenantNetworkId;
+import org.onosproject.vtnrsc.TenantNetwork.State;
+import org.onosproject.vtnrsc.TenantNetwork.Type;
+import org.onosproject.vtnrsc.tenantnetwork.TenantNetworkService;
+import org.onosproject.vtnrsc.web.TenantNetworkCodec;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Maps;
+
+/**
+ * REST resource for interacting with the inventory of networks.
+ */
+@Path("networks")
+public class TenantNetworkWebResource extends AbstractWebResource {
+ public static final String NETWORK_NOT_FOUND = "Network is not found";
+ public static final String NETWORK_ID_EXIST = "Network id is existed";
+ public static final String NETWORK_ID_NOT_EXIST = "Network id is not existed";
+ public static final String CREATE_NETWORK = "create network";
+ public static final String UPDATE_NETWORK = "update network";
+ public static final String DELETE_NETWORK = "delete network";
+ public static final String JSON_NOT_NULL = "JsonNode can not be null";
+
+ protected static final Logger log = LoggerFactory
+ .getLogger(TenantNetworkWebResource.class);
+ private final ConcurrentMap<TenantNetworkId, TenantNetwork> networksMap = Maps
+ .newConcurrentMap();
+
+ @GET
+ @Produces({ MediaType.APPLICATION_JSON })
+ public Response getNetworks(@QueryParam("id") String queryId,
+ @QueryParam("name") String queryName,
+ @QueryParam("admin_state_up") String queryadminStateUp,
+ @QueryParam("status") String querystate,
+ @QueryParam("shared") String queryshared,
+ @QueryParam("tenant_id") String querytenantId,
+ @QueryParam("router:external") String routerExternal,
+ @QueryParam("provider:network_type") String type,
+ @QueryParam("provider:physical_network") String physicalNetwork,
+ @QueryParam("provider:segmentation_id") String segmentationId) {
+ Iterable<TenantNetwork> networks = get(TenantNetworkService.class)
+ .getNetworks();
+ Iterator<TenantNetwork> networkors = networks.iterator();
+ while (networkors.hasNext()) {
+ TenantNetwork network = networkors.next();
+ if ((queryId == null || queryId.equals(network.id().toString()))
+ && (queryName == null || queryName.equals(network.name()))
+ && (queryadminStateUp == null || queryadminStateUp
+ .equals(network.adminStateUp()))
+ && (querystate == null || querystate.equals(network.state()
+ .toString()))
+ && (queryshared == null || queryshared.equals(network
+ .shared()))
+ && (querytenantId == null || querytenantId.equals(network
+ .tenantId().toString()))
+ && (routerExternal == null || routerExternal.equals(network
+ .routerExternal()))
+ && (type == null || type.equals(network.type()))
+ && (physicalNetwork == null || physicalNetwork
+ .equals(network.physicalNetwork()))
+ && (segmentationId == null || segmentationId.equals(network
+ .segmentationId()))) {
+ networksMap.putIfAbsent(network.id(), network);
+ }
+ }
+ networks = Collections.unmodifiableCollection(networksMap.values());
+ ObjectNode result = new ObjectMapper().createObjectNode();
+ result.set("networks", new TenantNetworkCodec().encode(networks, this));
+
+ return ok(result.toString()).build();
+ }
+
+ private State isState(String state) {
+ if (state.equals("ACTIVE")) {
+ return TenantNetwork.State.ACTIVE;
+ } else if (state.equals("BUILD")) {
+ return TenantNetwork.State.BUILD;
+ } else if (state.equals("DOWN")) {
+ return TenantNetwork.State.DOWN;
+ } else if (state.equals("ERROR")) {
+ return TenantNetwork.State.ERROR;
+ } else {
+ return null;
+ }
+ }
+
+ private Type isType(String type) {
+ if (type.equals("LOCAL")) {
+ return TenantNetwork.Type.LOCAL;
+ } else {
+ return null;
+ }
+ }
+
+ @GET
+ @Path("{id}")
+ @Produces({ MediaType.APPLICATION_JSON })
+ public Response getNetwork(@PathParam("id") String id) {
+
+ if (!get(TenantNetworkService.class).exists(TenantNetworkId
+ .networkId(id))) {
+ return ok("The tenantNetwork does not exists").build();
+ }
+ TenantNetwork network = nullIsNotFound(get(TenantNetworkService.class)
+ .getNetwork(TenantNetworkId.networkId(id)), NETWORK_NOT_FOUND);
+ ObjectNode result = new ObjectMapper().createObjectNode();
+ result.set("network", new TenantNetworkCodec().encode(network, this));
+
+ return ok(result.toString()).build();
+
+ }
+
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Response createNetworks(InputStream input) {
+ try {
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode cfg = mapper.readTree(input);
+ JsonNode nodes = null;
+ Iterable<TenantNetwork> networks = null;
+ if (cfg.get("network") != null) {
+ nodes = cfg.get("network");
+ if (nodes.isArray()) {
+ networks = changeJson2objs(nodes);
+ } else {
+ networks = changeJson2obj(CREATE_NETWORK, null, nodes);
+ }
+ } else if (cfg.get("networks") != null) {
+ nodes = cfg.get("networks");
+ networks = changeJson2objs(nodes);
+ }
+ Boolean issuccess = nullIsNotFound((get(TenantNetworkService.class)
+ .createNetworks(networks)),
+ NETWORK_NOT_FOUND);
+
+ if (!issuccess) {
+ return Response.status(INTERNAL_SERVER_ERROR)
+ .entity(NETWORK_ID_EXIST).build();
+ }
+ return Response.status(OK).entity(issuccess.toString()).build();
+ } catch (Exception e) {
+ log.error("Creates tenantNetwork exception {}.", e.toString());
+ return Response.status(INTERNAL_SERVER_ERROR).entity(e.toString())
+ .build();
+ }
+ }
+
+ @PUT
+ @Path("{id}")
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Response updateNetworks(@PathParam("id") String id, InputStream input) {
+ try {
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode cfg = mapper.readTree(input);
+ JsonNode nodes = null;
+ Iterable<TenantNetwork> networks = null;
+ if (cfg.get("network") != null) {
+ nodes = cfg.get("network");
+ if (nodes.isArray()) {
+ networks = changeJson2objs(nodes);
+ } else {
+ networks = changeJson2obj(UPDATE_NETWORK,
+ TenantNetworkId.networkId(id),
+ nodes);
+ }
+ } else if (cfg.get("networks") != null) {
+ nodes = cfg.get("networks");
+ networks = changeJson2objs(nodes);
+ }
+ Boolean issuccess = nullIsNotFound((get(TenantNetworkService.class)
+ .updateNetworks(networks)),
+ NETWORK_NOT_FOUND);
+ if (!issuccess) {
+ return Response.status(INTERNAL_SERVER_ERROR)
+ .entity(NETWORK_ID_NOT_EXIST).build();
+ }
+ return Response.status(OK).entity(issuccess.toString()).build();
+ } catch (Exception e) {
+ log.error("Updates tenantNetwork failed because of exception {}.",
+ e.toString());
+ return Response.status(INTERNAL_SERVER_ERROR).entity(e.toString())
+ .build();
+ }
+ }
+
+ @DELETE
+ @Path("{id}")
+ public Response deleteNetworks(@PathParam("id") String id) {
+ log.debug("Deletes network by identifier {}.", id);
+ Set<TenantNetworkId> networkSet = new HashSet<>();
+ networkSet.add(TenantNetworkId.networkId(id));
+ Boolean issuccess = nullIsNotFound(get(TenantNetworkService.class)
+ .removeNetworks(networkSet), NETWORK_NOT_FOUND);
+ if (!issuccess) {
+ log.debug("Network identifier {} is not existed", id);
+ return Response.status(INTERNAL_SERVER_ERROR)
+ .entity(NETWORK_ID_NOT_EXIST).build();
+ }
+ return Response.status(OK).entity(issuccess.toString()).build();
+ }
+
+ /**
+ * Returns a collection of tenantNetworks.
+ *
+ * @param flag the flag
+ * @param networkId network identifier
+ * @param node the network json node
+ * @return a collection of tenantNetworks
+ */
+ public Iterable<TenantNetwork> changeJson2obj(String flag,
+ TenantNetworkId networkId,
+ JsonNode node) {
+ checkNotNull(node, JSON_NOT_NULL);
+ TenantNetwork network = null;
+ ConcurrentMap<TenantNetworkId, TenantNetwork> networksMap = Maps
+ .newConcurrentMap();
+ if (node != null) {
+ checkArgument(node.get("admin_state_up").isBoolean(), "admin_state_up should be boolean");
+ checkArgument(node.get("shared").isBoolean(), "shared should be boolean");
+ checkArgument(node.get("router:external").isBoolean(), "router:external should be boolean");
+ String name = node.get("name").asText();
+ boolean adminStateUp = node.get("admin_state_up").asBoolean();
+ String state = node.get("status").asText();
+ boolean shared = node.get("shared").asBoolean();
+ String tenantId = node.get("tenant_id").asText();
+ boolean routerExternal = node.get("router:external").asBoolean();
+ String type = node.get("provider:network_type").asText();
+ String physicalNetwork = node.get("provider:physical_network")
+ .asText();
+ String segmentationId = node.get("provider:segmentation_id")
+ .asText();
+ TenantNetworkId id = null;
+ if (flag == CREATE_NETWORK) {
+ id = TenantNetworkId.networkId(node.get("id").asText());
+ } else if (flag == UPDATE_NETWORK) {
+ id = networkId;
+ }
+ network = new DefaultTenantNetwork(
+ id,
+ name,
+ adminStateUp,
+ isState(state),
+ shared,
+ TenantId.tenantId(tenantId),
+ routerExternal,
+ isType(type),
+ PhysicalNetwork
+ .physicalNetwork(physicalNetwork),
+ SegmentationId
+ .segmentationId(segmentationId));
+ networksMap.putIfAbsent(id, network);
+ }
+ return Collections.unmodifiableCollection(networksMap.values());
+ }
+
+ /**
+ * Returns a collection of tenantNetworks.
+ *
+ * @param nodes the network jsonnodes
+ * @return a collection of tenantNetworks
+ */
+ public Iterable<TenantNetwork> changeJson2objs(JsonNode nodes) {
+ checkNotNull(nodes, JSON_NOT_NULL);
+ TenantNetwork network = null;
+ ConcurrentMap<TenantNetworkId, TenantNetwork> networksMap = Maps
+ .newConcurrentMap();
+ if (nodes != null) {
+ for (JsonNode node : nodes) {
+ String id = node.get("id").asText();
+ String name = node.get("name").asText();
+ boolean adminStateUp = node.get("admin_state_up").asBoolean();
+ String state = node.get("status").asText();
+ boolean shared = node.get("shared").asBoolean();
+ String tenantId = node.get("tenant_id").asText();
+ boolean routerExternal = node.get("router:external")
+ .asBoolean();
+ String type = node.get("provider:network_type").asText();
+ String physicalNetwork = node.get("provider:physical_network")
+ .asText();
+ String segmentationId = node.get("provider:segmentation_id")
+ .asText();
+ network = new DefaultTenantNetwork(
+ TenantNetworkId
+ .networkId(id),
+ name,
+ adminStateUp,
+ isState(state),
+ shared,
+ TenantId.tenantId(tenantId),
+ routerExternal,
+ isType(type),
+ PhysicalNetwork
+ .physicalNetwork(physicalNetwork),
+ SegmentationId
+ .segmentationId(segmentationId));
+ networksMap.putIfAbsent(TenantNetworkId.networkId(id), network);
+ }
+ }
+ return Collections.unmodifiableCollection(networksMap.values());
+ }
+
+ /**
+ * Returns the specified item if that items is null; otherwise throws not
+ * found exception.
+ *
+ * @param item item to check
+ * @param <T> item type
+ * @param message not found message
+ * @return item if not null
+ * @throws org.onlab.util.ItemNotFoundException if item is null
+ */
+ protected <T> T nullIsNotFound(T item, String message) {
+ if (item == null) {
+ throw new ItemNotFoundException(message);
+ }
+ return item;
+ }
+}
diff --git a/framework/src/onos/apps/vtnweb/src/main/java/org/onosproject/vtnweb/resources/VirtualPortWebResource.java b/framework/src/onos/apps/vtnweb/src/main/java/org/onosproject/vtnweb/resources/VirtualPortWebResource.java
index 0a427bba..d0b7ed2d 100644
--- a/framework/src/onos/apps/vtnweb/src/main/java/org/onosproject/vtnweb/resources/VirtualPortWebResource.java
+++ b/framework/src/onos/apps/vtnweb/src/main/java/org/onosproject/vtnweb/resources/VirtualPortWebResource.java
@@ -1,410 +1,410 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.vtnweb.resources;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;
-import static javax.ws.rs.core.Response.Status.OK;
-
-import java.io.InputStream;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentMap;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-import org.onlab.util.ItemNotFoundException;
-import org.onosproject.net.DeviceId;
-import org.onosproject.rest.AbstractWebResource;
-import org.onosproject.vtnrsc.AllowedAddressPair;
-import org.onosproject.vtnrsc.BindingHostId;
-import org.onosproject.vtnrsc.DefaultVirtualPort;
-import org.onosproject.vtnrsc.FixedIp;
-import org.onosproject.vtnrsc.SecurityGroup;
-import org.onosproject.vtnrsc.SubnetId;
-import org.onosproject.vtnrsc.TenantId;
-import org.onosproject.vtnrsc.TenantNetworkId;
-import org.onosproject.vtnrsc.VirtualPort;
-import org.onosproject.vtnrsc.VirtualPort.State;
-import org.onosproject.vtnrsc.VirtualPortId;
-import org.onosproject.vtnrsc.virtualport.VirtualPortService;
-import org.onosproject.vtnrsc.web.VirtualPortCodec;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
-/**
- * REST resource for interacting with the inventory of infrastructure
- * virtualPort.
- */
-@Path("ports")
-public class VirtualPortWebResource extends AbstractWebResource {
- public static final String VPORT_NOT_FOUND = "VirtualPort is not found";
- public static final String VPORT_ID_EXIST = "VirtualPort id is exist";
- public static final String VPORT_ID_NOT_EXIST = "VirtualPort id is not exist";
- public static final String JSON_NOT_NULL = "JsonNode can not be null";
- protected static final Logger log = LoggerFactory
- .getLogger(VirtualPortService.class);
-
- @GET
- @Produces({ MediaType.APPLICATION_JSON })
- public Response getPorts() {
- Iterable<VirtualPort> virtualPorts = get(VirtualPortService.class)
- .getPorts();
- ObjectNode result = new ObjectMapper().createObjectNode();
- result.set("ports", new VirtualPortCodec().encode(virtualPorts, this));
- return ok(result.toString()).build();
- }
-
- @GET
- @Path("{id}")
- @Produces({ MediaType.APPLICATION_JSON })
- public Response getportsById(@PathParam("id") String id) {
-
- if (!get(VirtualPortService.class).exists(VirtualPortId.portId(id))) {
- return ok("The virtualPort does not exists").build();
- }
- VirtualPort virtualPort = nullIsNotFound(get(VirtualPortService.class)
- .getPort(VirtualPortId.portId(id)), VPORT_NOT_FOUND);
- ObjectNode result = new ObjectMapper().createObjectNode();
- result.set("port", new VirtualPortCodec().encode(virtualPort, this));
- return ok(result.toString()).build();
- }
-
- @POST
- @Consumes(MediaType.APPLICATION_JSON)
- @Produces(MediaType.APPLICATION_JSON)
- public Response createPorts(InputStream input) {
- try {
- ObjectMapper mapper = new ObjectMapper();
- JsonNode cfg = mapper.readTree(input);
- Iterable<VirtualPort> vPorts = createOrUpdateByInputStream(cfg);
- Boolean issuccess = nullIsNotFound(get(VirtualPortService.class)
- .createPorts(vPorts), VPORT_NOT_FOUND);
- if (!issuccess) {
- return Response.status(INTERNAL_SERVER_ERROR)
- .entity(VPORT_ID_NOT_EXIST).build();
- }
- return Response.status(OK).entity(issuccess.toString()).build();
- } catch (Exception e) {
- log.error("Creates VirtualPort failed because of exception {}",
- e.toString());
- return Response.status(INTERNAL_SERVER_ERROR).entity(e.toString())
- .build();
- }
- }
-
- @Path("{portUUID}")
- @DELETE
- public Response deletePorts(@PathParam("portUUID") String id) {
- Set<VirtualPortId> vPortIds = new HashSet<VirtualPortId>();
- try {
- if (id != null) {
- vPortIds.add(VirtualPortId.portId(id));
- }
- Boolean issuccess = nullIsNotFound(get(VirtualPortService.class)
- .removePorts(vPortIds), VPORT_NOT_FOUND);
- if (!issuccess) {
- return Response.status(INTERNAL_SERVER_ERROR)
- .entity(VPORT_ID_NOT_EXIST).build();
- }
- return Response.status(OK).entity(issuccess.toString()).build();
- } catch (Exception e) {
- log.error("Deletes VirtualPort failed because of exception {}",
- e.toString());
- return Response.status(INTERNAL_SERVER_ERROR).entity(e.toString())
- .build();
- }
- }
-
- @PUT
- @Path("{id}")
- @Consumes(MediaType.APPLICATION_JSON)
- @Produces(MediaType.APPLICATION_JSON)
- public Response updatePorts(@PathParam("id") String id, InputStream input) {
- try {
- ObjectMapper mapper = new ObjectMapper();
- JsonNode cfg = mapper.readTree(input);
- Iterable<VirtualPort> vPorts = createOrUpdateByInputStream(cfg);
- Boolean issuccess = nullIsNotFound(get(VirtualPortService.class)
- .updatePorts(vPorts), VPORT_NOT_FOUND);
- if (!issuccess) {
- return Response.status(INTERNAL_SERVER_ERROR)
- .entity(VPORT_ID_NOT_EXIST).build();
- }
- return Response.status(OK).entity(issuccess.toString()).build();
- } catch (Exception e) {
- log.error("Updates failed because of exception {}", e.toString());
- return Response.status(INTERNAL_SERVER_ERROR).entity(e.toString())
- .build();
- }
- }
-
- /**
- * Returns a Object of the currently known infrastructure virtualPort.
- *
- * @param vPortNode the virtualPort json node
- * @return a collection of virtualPorts
- */
- public Iterable<VirtualPort> createOrUpdateByInputStream(JsonNode vPortNode) {
- checkNotNull(vPortNode, JSON_NOT_NULL);
- JsonNode vPortNodes = vPortNode.get("ports");
- if (vPortNodes == null) {
- vPortNodes = vPortNode.get("port");
- }
- if (vPortNodes.isArray()) {
- return changeJsonToPorts(vPortNodes);
- } else {
- return changeJsonToPort(vPortNodes);
- }
- }
-
- /**
- * Returns the iterable collection of virtualports from subnetNodes.
- *
- * @param vPortNodes the virtualPort json node
- * @return virtualPorts a collection of virtualPorts
- */
- public Iterable<VirtualPort> changeJsonToPorts(JsonNode vPortNodes) {
- checkNotNull(vPortNodes, JSON_NOT_NULL);
- Map<VirtualPortId, VirtualPort> portMap = new HashMap<VirtualPortId, VirtualPort>();
- Map<String, String> strMap = new HashMap<String, String>();
- for (JsonNode vPortnode : vPortNodes) {
- VirtualPortId id = VirtualPortId.portId(vPortnode.get("id")
- .asText());
- String name = vPortnode.get("name").asText();
- TenantId tenantId = TenantId.tenantId(vPortnode.get("tenant_id")
- .asText());
- TenantNetworkId networkId = TenantNetworkId.networkId(vPortnode
- .get("network_id").asText());
- checkArgument(vPortnode.get("admin_state_up").isBoolean(), "admin_state_up should be boolean");
- Boolean adminStateUp = vPortnode.get("admin_state_up").asBoolean();
- String state = vPortnode.get("status").asText();
- MacAddress macAddress = MacAddress.valueOf(vPortnode
- .get("mac_address").asText());
- DeviceId deviceId = DeviceId.deviceId(vPortnode.get("device_id")
- .asText());
- String deviceOwner = vPortnode.get("device_owner").asText();
- JsonNode fixedIpNodes = vPortNodes.get("fixed_ips");
- Set<FixedIp> fixedIps = new HashSet<FixedIp>();
- for (JsonNode fixedIpNode : fixedIpNodes) {
- FixedIp fixedIp = jsonNodeToFixedIps(fixedIpNode);
- fixedIps.add(fixedIp);
- }
-
- BindingHostId bindingHostId = BindingHostId
- .bindingHostId(vPortnode.get("binding:host_id").asText());
- String bindingVnicType = vPortnode.get("binding:vnic_type")
- .asText();
- String bindingVifType = vPortnode.get("binding:vif_type").asText();
- String bindingVifDetails = vPortnode.get("binding:vif_details")
- .asText();
- JsonNode allowedAddressPairJsonNode = vPortnode
- .get("allowed_address_pairs");
- Collection<AllowedAddressPair> allowedAddressPairs =
- jsonNodeToAllowedAddressPair(allowedAddressPairJsonNode);
- JsonNode securityGroupNode = vPortnode.get("security_groups");
- Collection<SecurityGroup> securityGroups = jsonNodeToSecurityGroup(securityGroupNode);
- strMap.put("name", name);
- strMap.put("deviceOwner", deviceOwner);
- strMap.put("bindingVnicType", bindingVnicType);
- strMap.put("bindingVifType", bindingVifType);
- strMap.put("bindingVifDetails", bindingVifDetails);
- VirtualPort vPort = new DefaultVirtualPort(id, networkId,
- adminStateUp, strMap,
- isState(state),
- macAddress, tenantId,
- deviceId, fixedIps,
- bindingHostId,
- Sets.newHashSet(allowedAddressPairs),
- Sets.newHashSet(securityGroups));
- portMap.put(id, vPort);
- }
- return Collections.unmodifiableCollection(portMap.values());
- }
-
- /**
- * Returns a collection of virtualPorts from subnetNodes.
- *
- * @param vPortNodes the virtualPort json node
- * @return virtualPorts a collection of virtualPorts
- */
- public Iterable<VirtualPort> changeJsonToPort(JsonNode vPortNodes) {
- checkNotNull(vPortNodes, JSON_NOT_NULL);
- Map<VirtualPortId, VirtualPort> vportMap = new HashMap<VirtualPortId, VirtualPort>();
- Map<String, String> strMap = new HashMap<String, String>();
- VirtualPortId id = VirtualPortId.portId(vPortNodes.get("id").asText());
- String name = vPortNodes.get("name").asText();
- TenantId tenantId = TenantId.tenantId(vPortNodes.get("tenant_id")
- .asText());
- TenantNetworkId networkId = TenantNetworkId.networkId(vPortNodes
- .get("network_id").asText());
- Boolean adminStateUp = vPortNodes.get("admin_state_up").asBoolean();
- String state = vPortNodes.get("status").asText();
- MacAddress macAddress = MacAddress.valueOf(vPortNodes
- .get("mac_address").asText());
- DeviceId deviceId = DeviceId.deviceId(vPortNodes.get("device_id")
- .asText());
- String deviceOwner = vPortNodes.get("device_owner").asText();
- JsonNode fixedIpNodes = vPortNodes.get("fixed_ips");
- Set<FixedIp> fixedIps = new HashSet<FixedIp>();
- for (JsonNode fixedIpNode : fixedIpNodes) {
- FixedIp fixedIp = jsonNodeToFixedIps(fixedIpNode);
- fixedIps.add(fixedIp);
- }
-
- BindingHostId bindingHostId = BindingHostId
- .bindingHostId(vPortNodes.get("binding:host_id").asText());
- String bindingVnicType = vPortNodes.get("binding:vnic_type").asText();
- String bindingVifType = vPortNodes.get("binding:vif_type").asText();
- String bindingVifDetails = vPortNodes.get("binding:vif_details")
- .asText();
- JsonNode allowedAddressPairJsonNode = vPortNodes
- .get("allowed_address_pairs");
- Collection<AllowedAddressPair> allowedAddressPairs =
- jsonNodeToAllowedAddressPair(allowedAddressPairJsonNode);
- JsonNode securityGroupNode = vPortNodes.get("security_groups");
- Collection<SecurityGroup> securityGroups = jsonNodeToSecurityGroup(securityGroupNode);
- strMap.put("name", name);
- strMap.put("deviceOwner", deviceOwner);
- strMap.put("bindingVnicType", bindingVnicType);
- strMap.put("bindingVifType", bindingVifType);
- strMap.put("bindingVifDetails", bindingVifDetails);
- VirtualPort vPort = new DefaultVirtualPort(id, networkId, adminStateUp,
- strMap, isState(state),
- macAddress, tenantId,
- deviceId, fixedIps,
- bindingHostId,
- Sets.newHashSet(allowedAddressPairs),
- Sets.newHashSet(securityGroups));
- vportMap.put(id, vPort);
-
- return Collections.unmodifiableCollection(vportMap.values());
- }
-
- /**
- * Returns a Object of the currently known infrastructure virtualPort.
- *
- * @param allowedAddressPairs the allowedAddressPairs json node
- * @return a collection of allowedAddressPair
- */
- public Collection<AllowedAddressPair> jsonNodeToAllowedAddressPair(JsonNode allowedAddressPairs) {
- checkNotNull(allowedAddressPairs, JSON_NOT_NULL);
- ConcurrentMap<Integer, AllowedAddressPair> allowMaps = Maps
- .newConcurrentMap();
- int i = 0;
- for (JsonNode node : allowedAddressPairs) {
- IpAddress ip = IpAddress.valueOf(node.get("ip_address").asText());
- MacAddress mac = MacAddress.valueOf(node.get("mac_address")
- .asText());
- AllowedAddressPair allows = AllowedAddressPair
- .allowedAddressPair(ip, mac);
- allowMaps.put(i, allows);
- i++;
- }
- log.debug("The jsonNode of allowedAddressPairallow is {}"
- + allowedAddressPairs.toString());
- return Collections.unmodifiableCollection(allowMaps.values());
- }
-
- /**
- * Returns a collection of virtualPorts.
- *
- * @param securityGroups the virtualPort jsonnode
- * @return a collection of securityGroups
- */
- public Collection<SecurityGroup> jsonNodeToSecurityGroup(JsonNode securityGroups) {
- checkNotNull(securityGroups, JSON_NOT_NULL);
- ConcurrentMap<Integer, SecurityGroup> securMaps = Maps
- .newConcurrentMap();
- int i = 0;
- for (JsonNode node : securityGroups) {
- SecurityGroup securityGroup = SecurityGroup
- .securityGroup(node.asText());
- securMaps.put(i, securityGroup);
- i++;
- }
- return Collections.unmodifiableCollection(securMaps.values());
- }
-
- /**
- * Returns a collection of fixedIps.
- *
- * @param fixedIpNode the fixedIp jsonnode
- * @return a collection of SecurityGroup
- */
- public FixedIp jsonNodeToFixedIps(JsonNode fixedIpNode) {
- SubnetId subnetId = SubnetId.subnetId(fixedIpNode.get("subnet_id")
- .asText());
- IpAddress ipAddress = IpAddress.valueOf(fixedIpNode.get("ip_address")
- .asText());
- FixedIp fixedIps = FixedIp.fixedIp(subnetId, ipAddress);
- return fixedIps;
- }
-
- /**
- * Returns VirtualPort State.
- *
- * @param state the virtualport state
- * @return the virtualPort state
- */
- private State isState(String state) {
- if (state.equals("ACTIVE")) {
- return VirtualPort.State.ACTIVE;
- } else {
- return VirtualPort.State.DOWN;
- }
-
- }
-
- /**
- * Returns the specified item if that items is null; otherwise throws not
- * found exception.
- *
- * @param item item to check
- * @param <T> item type
- * @param message not found message
- * @return item if not null
- * @throws org.onlab.util.ItemNotFoundException if item is null
- */
- protected <T> T nullIsNotFound(T item, String message) {
- if (item == null) {
- throw new ItemNotFoundException(message);
- }
- return item;
- }
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.vtnweb.resources;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;
+import static javax.ws.rs.core.Response.Status.OK;
+
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentMap;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.util.ItemNotFoundException;
+import org.onosproject.net.DeviceId;
+import org.onosproject.rest.AbstractWebResource;
+import org.onosproject.vtnrsc.AllowedAddressPair;
+import org.onosproject.vtnrsc.BindingHostId;
+import org.onosproject.vtnrsc.DefaultVirtualPort;
+import org.onosproject.vtnrsc.FixedIp;
+import org.onosproject.vtnrsc.SecurityGroup;
+import org.onosproject.vtnrsc.SubnetId;
+import org.onosproject.vtnrsc.TenantId;
+import org.onosproject.vtnrsc.TenantNetworkId;
+import org.onosproject.vtnrsc.VirtualPort;
+import org.onosproject.vtnrsc.VirtualPort.State;
+import org.onosproject.vtnrsc.VirtualPortId;
+import org.onosproject.vtnrsc.virtualport.VirtualPortService;
+import org.onosproject.vtnrsc.web.VirtualPortCodec;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+
+/**
+ * REST resource for interacting with the inventory of infrastructure
+ * virtualPort.
+ */
+@Path("ports")
+public class VirtualPortWebResource extends AbstractWebResource {
+ public static final String VPORT_NOT_FOUND = "VirtualPort is not found";
+ public static final String VPORT_ID_EXIST = "VirtualPort id is exist";
+ public static final String VPORT_ID_NOT_EXIST = "VirtualPort id is not exist";
+ public static final String JSON_NOT_NULL = "JsonNode can not be null";
+ protected static final Logger log = LoggerFactory
+ .getLogger(VirtualPortService.class);
+
+ @GET
+ @Produces({ MediaType.APPLICATION_JSON })
+ public Response getPorts() {
+ Iterable<VirtualPort> virtualPorts = get(VirtualPortService.class)
+ .getPorts();
+ ObjectNode result = new ObjectMapper().createObjectNode();
+ result.set("ports", new VirtualPortCodec().encode(virtualPorts, this));
+ return ok(result.toString()).build();
+ }
+
+ @GET
+ @Path("{id}")
+ @Produces({ MediaType.APPLICATION_JSON })
+ public Response getportsById(@PathParam("id") String id) {
+
+ if (!get(VirtualPortService.class).exists(VirtualPortId.portId(id))) {
+ return ok("The virtualPort does not exists").build();
+ }
+ VirtualPort virtualPort = nullIsNotFound(get(VirtualPortService.class)
+ .getPort(VirtualPortId.portId(id)), VPORT_NOT_FOUND);
+ ObjectNode result = new ObjectMapper().createObjectNode();
+ result.set("port", new VirtualPortCodec().encode(virtualPort, this));
+ return ok(result.toString()).build();
+ }
+
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response createPorts(InputStream input) {
+ try {
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode cfg = mapper.readTree(input);
+ Iterable<VirtualPort> vPorts = createOrUpdateByInputStream(cfg);
+ Boolean issuccess = nullIsNotFound(get(VirtualPortService.class)
+ .createPorts(vPorts), VPORT_NOT_FOUND);
+ if (!issuccess) {
+ return Response.status(INTERNAL_SERVER_ERROR)
+ .entity(VPORT_ID_NOT_EXIST).build();
+ }
+ return Response.status(OK).entity(issuccess.toString()).build();
+ } catch (Exception e) {
+ log.error("Creates VirtualPort failed because of exception {}",
+ e.toString());
+ return Response.status(INTERNAL_SERVER_ERROR).entity(e.toString())
+ .build();
+ }
+ }
+
+ @Path("{portUUID}")
+ @DELETE
+ public Response deletePorts(@PathParam("portUUID") String id) {
+ Set<VirtualPortId> vPortIds = new HashSet<>();
+ try {
+ if (id != null) {
+ vPortIds.add(VirtualPortId.portId(id));
+ }
+ Boolean issuccess = nullIsNotFound(get(VirtualPortService.class)
+ .removePorts(vPortIds), VPORT_NOT_FOUND);
+ if (!issuccess) {
+ return Response.status(INTERNAL_SERVER_ERROR)
+ .entity(VPORT_ID_NOT_EXIST).build();
+ }
+ return Response.status(OK).entity(issuccess.toString()).build();
+ } catch (Exception e) {
+ log.error("Deletes VirtualPort failed because of exception {}",
+ e.toString());
+ return Response.status(INTERNAL_SERVER_ERROR).entity(e.toString())
+ .build();
+ }
+ }
+
+ @PUT
+ @Path("{id}")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response updatePorts(@PathParam("id") String id, InputStream input) {
+ try {
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode cfg = mapper.readTree(input);
+ Iterable<VirtualPort> vPorts = createOrUpdateByInputStream(cfg);
+ Boolean issuccess = nullIsNotFound(get(VirtualPortService.class)
+ .updatePorts(vPorts), VPORT_NOT_FOUND);
+ if (!issuccess) {
+ return Response.status(INTERNAL_SERVER_ERROR)
+ .entity(VPORT_ID_NOT_EXIST).build();
+ }
+ return Response.status(OK).entity(issuccess.toString()).build();
+ } catch (Exception e) {
+ log.error("Updates failed because of exception {}", e.toString());
+ return Response.status(INTERNAL_SERVER_ERROR).entity(e.toString())
+ .build();
+ }
+ }
+
+ /**
+ * Returns a Object of the currently known infrastructure virtualPort.
+ *
+ * @param vPortNode the virtualPort json node
+ * @return a collection of virtualPorts
+ */
+ public Iterable<VirtualPort> createOrUpdateByInputStream(JsonNode vPortNode) {
+ checkNotNull(vPortNode, JSON_NOT_NULL);
+ JsonNode vPortNodes = vPortNode.get("ports");
+ if (vPortNodes == null) {
+ vPortNodes = vPortNode.get("port");
+ }
+ if (vPortNodes.isArray()) {
+ return changeJsonToPorts(vPortNodes);
+ } else {
+ return changeJsonToPort(vPortNodes);
+ }
+ }
+
+ /**
+ * Returns the iterable collection of virtualports from subnetNodes.
+ *
+ * @param vPortNodes the virtualPort json node
+ * @return virtualPorts a collection of virtualPorts
+ */
+ public Iterable<VirtualPort> changeJsonToPorts(JsonNode vPortNodes) {
+ checkNotNull(vPortNodes, JSON_NOT_NULL);
+ Map<VirtualPortId, VirtualPort> portMap = new HashMap<>();
+ Map<String, String> strMap = new HashMap<>();
+ for (JsonNode vPortnode : vPortNodes) {
+ VirtualPortId id = VirtualPortId.portId(vPortnode.get("id")
+ .asText());
+ String name = vPortnode.get("name").asText();
+ TenantId tenantId = TenantId.tenantId(vPortnode.get("tenant_id")
+ .asText());
+ TenantNetworkId networkId = TenantNetworkId.networkId(vPortnode
+ .get("network_id").asText());
+ checkArgument(vPortnode.get("admin_state_up").isBoolean(), "admin_state_up should be boolean");
+ Boolean adminStateUp = vPortnode.get("admin_state_up").asBoolean();
+ String state = vPortnode.get("status").asText();
+ MacAddress macAddress = MacAddress.valueOf(vPortnode
+ .get("mac_address").asText());
+ DeviceId deviceId = DeviceId.deviceId(vPortnode.get("device_id")
+ .asText());
+ String deviceOwner = vPortnode.get("device_owner").asText();
+ JsonNode fixedIpNodes = vPortNodes.get("fixed_ips");
+ Set<FixedIp> fixedIps = new HashSet<>();
+ for (JsonNode fixedIpNode : fixedIpNodes) {
+ FixedIp fixedIp = jsonNodeToFixedIps(fixedIpNode);
+ fixedIps.add(fixedIp);
+ }
+
+ BindingHostId bindingHostId = BindingHostId
+ .bindingHostId(vPortnode.get("binding:host_id").asText());
+ String bindingVnicType = vPortnode.get("binding:vnic_type")
+ .asText();
+ String bindingVifType = vPortnode.get("binding:vif_type").asText();
+ String bindingVifDetails = vPortnode.get("binding:vif_details")
+ .asText();
+ JsonNode allowedAddressPairJsonNode = vPortnode
+ .get("allowed_address_pairs");
+ Collection<AllowedAddressPair> allowedAddressPairs =
+ jsonNodeToAllowedAddressPair(allowedAddressPairJsonNode);
+ JsonNode securityGroupNode = vPortnode.get("security_groups");
+ Collection<SecurityGroup> securityGroups = jsonNodeToSecurityGroup(securityGroupNode);
+ strMap.put("name", name);
+ strMap.put("deviceOwner", deviceOwner);
+ strMap.put("bindingVnicType", bindingVnicType);
+ strMap.put("bindingVifType", bindingVifType);
+ strMap.put("bindingVifDetails", bindingVifDetails);
+ VirtualPort vPort = new DefaultVirtualPort(id, networkId,
+ adminStateUp, strMap,
+ isState(state),
+ macAddress, tenantId,
+ deviceId, fixedIps,
+ bindingHostId,
+ Sets.newHashSet(allowedAddressPairs),
+ Sets.newHashSet(securityGroups));
+ portMap.put(id, vPort);
+ }
+ return Collections.unmodifiableCollection(portMap.values());
+ }
+
+ /**
+ * Returns a collection of virtualPorts from subnetNodes.
+ *
+ * @param vPortNodes the virtualPort json node
+ * @return virtualPorts a collection of virtualPorts
+ */
+ public Iterable<VirtualPort> changeJsonToPort(JsonNode vPortNodes) {
+ checkNotNull(vPortNodes, JSON_NOT_NULL);
+ Map<VirtualPortId, VirtualPort> vportMap = new HashMap<>();
+ Map<String, String> strMap = new HashMap<>();
+ VirtualPortId id = VirtualPortId.portId(vPortNodes.get("id").asText());
+ String name = vPortNodes.get("name").asText();
+ TenantId tenantId = TenantId.tenantId(vPortNodes.get("tenant_id")
+ .asText());
+ TenantNetworkId networkId = TenantNetworkId.networkId(vPortNodes
+ .get("network_id").asText());
+ Boolean adminStateUp = vPortNodes.get("admin_state_up").asBoolean();
+ String state = vPortNodes.get("status").asText();
+ MacAddress macAddress = MacAddress.valueOf(vPortNodes
+ .get("mac_address").asText());
+ DeviceId deviceId = DeviceId.deviceId(vPortNodes.get("device_id")
+ .asText());
+ String deviceOwner = vPortNodes.get("device_owner").asText();
+ JsonNode fixedIpNodes = vPortNodes.get("fixed_ips");
+ Set<FixedIp> fixedIps = new HashSet<>();
+ for (JsonNode fixedIpNode : fixedIpNodes) {
+ FixedIp fixedIp = jsonNodeToFixedIps(fixedIpNode);
+ fixedIps.add(fixedIp);
+ }
+
+ BindingHostId bindingHostId = BindingHostId
+ .bindingHostId(vPortNodes.get("binding:host_id").asText());
+ String bindingVnicType = vPortNodes.get("binding:vnic_type").asText();
+ String bindingVifType = vPortNodes.get("binding:vif_type").asText();
+ String bindingVifDetails = vPortNodes.get("binding:vif_details")
+ .asText();
+ JsonNode allowedAddressPairJsonNode = vPortNodes
+ .get("allowed_address_pairs");
+ Collection<AllowedAddressPair> allowedAddressPairs =
+ jsonNodeToAllowedAddressPair(allowedAddressPairJsonNode);
+ JsonNode securityGroupNode = vPortNodes.get("security_groups");
+ Collection<SecurityGroup> securityGroups = jsonNodeToSecurityGroup(securityGroupNode);
+ strMap.put("name", name);
+ strMap.put("deviceOwner", deviceOwner);
+ strMap.put("bindingVnicType", bindingVnicType);
+ strMap.put("bindingVifType", bindingVifType);
+ strMap.put("bindingVifDetails", bindingVifDetails);
+ VirtualPort vPort = new DefaultVirtualPort(id, networkId, adminStateUp,
+ strMap, isState(state),
+ macAddress, tenantId,
+ deviceId, fixedIps,
+ bindingHostId,
+ Sets.newHashSet(allowedAddressPairs),
+ Sets.newHashSet(securityGroups));
+ vportMap.put(id, vPort);
+
+ return Collections.unmodifiableCollection(vportMap.values());
+ }
+
+ /**
+ * Returns a Object of the currently known infrastructure virtualPort.
+ *
+ * @param allowedAddressPairs the allowedAddressPairs json node
+ * @return a collection of allowedAddressPair
+ */
+ public Collection<AllowedAddressPair> jsonNodeToAllowedAddressPair(JsonNode allowedAddressPairs) {
+ checkNotNull(allowedAddressPairs, JSON_NOT_NULL);
+ ConcurrentMap<Integer, AllowedAddressPair> allowMaps = Maps
+ .newConcurrentMap();
+ int i = 0;
+ for (JsonNode node : allowedAddressPairs) {
+ IpAddress ip = IpAddress.valueOf(node.get("ip_address").asText());
+ MacAddress mac = MacAddress.valueOf(node.get("mac_address")
+ .asText());
+ AllowedAddressPair allows = AllowedAddressPair
+ .allowedAddressPair(ip, mac);
+ allowMaps.put(i, allows);
+ i++;
+ }
+ log.debug("The jsonNode of allowedAddressPairallow is {}"
+ + allowedAddressPairs.toString());
+ return Collections.unmodifiableCollection(allowMaps.values());
+ }
+
+ /**
+ * Returns a collection of virtualPorts.
+ *
+ * @param securityGroups the virtualPort jsonnode
+ * @return a collection of securityGroups
+ */
+ public Collection<SecurityGroup> jsonNodeToSecurityGroup(JsonNode securityGroups) {
+ checkNotNull(securityGroups, JSON_NOT_NULL);
+ ConcurrentMap<Integer, SecurityGroup> securMaps = Maps
+ .newConcurrentMap();
+ int i = 0;
+ for (JsonNode node : securityGroups) {
+ SecurityGroup securityGroup = SecurityGroup
+ .securityGroup(node.asText());
+ securMaps.put(i, securityGroup);
+ i++;
+ }
+ return Collections.unmodifiableCollection(securMaps.values());
+ }
+
+ /**
+ * Returns a collection of fixedIps.
+ *
+ * @param fixedIpNode the fixedIp jsonnode
+ * @return a collection of SecurityGroup
+ */
+ public FixedIp jsonNodeToFixedIps(JsonNode fixedIpNode) {
+ SubnetId subnetId = SubnetId.subnetId(fixedIpNode.get("subnet_id")
+ .asText());
+ IpAddress ipAddress = IpAddress.valueOf(fixedIpNode.get("ip_address")
+ .asText());
+ FixedIp fixedIps = FixedIp.fixedIp(subnetId, ipAddress);
+ return fixedIps;
+ }
+
+ /**
+ * Returns VirtualPort State.
+ *
+ * @param state the virtualport state
+ * @return the virtualPort state
+ */
+ private State isState(String state) {
+ if (state.equals("ACTIVE")) {
+ return VirtualPort.State.ACTIVE;
+ } else {
+ return VirtualPort.State.DOWN;
+ }
+
+ }
+
+ /**
+ * Returns the specified item if that items is null; otherwise throws not
+ * found exception.
+ *
+ * @param item item to check
+ * @param <T> item type
+ * @param message not found message
+ * @return item if not null
+ * @throws org.onlab.util.ItemNotFoundException if item is null
+ */
+ protected <T> T nullIsNotFound(T item, String message) {
+ if (item == null) {
+ throw new ItemNotFoundException(message);
+ }
+ return item;
+ }
+}
diff --git a/framework/src/onos/apps/xos-integration/pom.xml b/framework/src/onos/apps/xos-integration/pom.xml
index 0dc2300e..68eafd16 100644
--- a/framework/src/onos/apps/xos-integration/pom.xml
+++ b/framework/src/onos/apps/xos-integration/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/cli/pom.xml b/framework/src/onos/cli/pom.xml
index a9cd180d..3d29a26e 100644
--- a/framework/src/onos/cli/pom.xml
+++ b/framework/src/onos/cli/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/cli/src/main/java/org/onosproject/cli/Comparators.java b/framework/src/onos/cli/src/main/java/org/onosproject/cli/Comparators.java
index 0ab6845f..b0cbbdd6 100644
--- a/framework/src/onos/cli/src/main/java/org/onosproject/cli/Comparators.java
+++ b/framework/src/onos/cli/src/main/java/org/onosproject/cli/Comparators.java
@@ -25,7 +25,6 @@ import org.onosproject.net.ElementId;
import org.onosproject.net.Port;
import org.onosproject.net.flow.FlowRule;
import org.onosproject.net.group.Group;
-import org.onosproject.net.host.PortAddresses;
import org.onosproject.net.topology.TopologyCluster;
import java.util.Comparator;
@@ -113,13 +112,6 @@ public final class Comparators {
}
};
- public static final Comparator<PortAddresses> ADDRESSES_COMPARATOR = new Comparator<PortAddresses>() {
- @Override
- public int compare(PortAddresses arg0, PortAddresses arg1) {
- return CONNECT_POINT_COMPARATOR.compare(arg0.connectPoint(), arg1.connectPoint());
- }
- };
-
public static final Comparator<Interface> INTERFACES_COMPARATOR = (intf1, intf2) ->
CONNECT_POINT_COMPARATOR.compare(intf1.connectPoint(), intf2.connectPoint());
diff --git a/framework/src/onos/cli/src/main/java/org/onosproject/cli/MetricNameCompleter.java b/framework/src/onos/cli/src/main/java/org/onosproject/cli/MetricNameCompleter.java
index f05181f5..5ab15b08 100644
--- a/framework/src/onos/cli/src/main/java/org/onosproject/cli/MetricNameCompleter.java
+++ b/framework/src/onos/cli/src/main/java/org/onosproject/cli/MetricNameCompleter.java
@@ -28,7 +28,7 @@ public class MetricNameCompleter extends AbstractChoicesCompleter {
@Override
protected List<String> choices() {
MetricsService metricsService = AbstractShellCommand.get(MetricsService.class);
- return new ArrayList<String>(metricsService.getMetrics().keySet());
+ return new ArrayList<>(metricsService.getMetrics().keySet());
}
}
diff --git a/framework/src/onos/cli/src/main/java/org/onosproject/cli/cfg/NetworkConfigCommand.java b/framework/src/onos/cli/src/main/java/org/onosproject/cli/cfg/NetworkConfigCommand.java
index 5f2f86ee..d99a1839 100644
--- a/framework/src/onos/cli/src/main/java/org/onosproject/cli/cfg/NetworkConfigCommand.java
+++ b/framework/src/onos/cli/src/main/java/org/onosproject/cli/cfg/NetworkConfigCommand.java
@@ -15,6 +15,7 @@
*/
package org.onosproject.cli.cfg;
+import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -52,7 +53,7 @@ public class NetworkConfigCommand extends AbstractShellCommand {
@Override
protected void execute() {
service = get(NetworkConfigService.class);
- JsonNode root = new ObjectMapper().createObjectNode();
+ JsonNode root = mapper.createObjectNode();
if (isNullOrEmpty(subjectKey)) {
addAll((ObjectNode) root);
} else {
@@ -68,14 +69,19 @@ public class NetworkConfigCommand extends AbstractShellCommand {
}
}
}
- print("%s", root.toString());
+
+ try {
+ print("%s", mapper.writerWithDefaultPrettyPrinter().writeValueAsString(root));
+ } catch (JsonProcessingException e) {
+ throw new RuntimeException("Error writing JSON to string", e);
+ }
}
@SuppressWarnings("unchecked")
private void addAll(ObjectNode root) {
service.getSubjectClasses()
.forEach(sc -> {
- SubjectFactory sf = service.getSubjectFactory((Class) sc);
+ SubjectFactory sf = service.getSubjectFactory(sc);
addSubjectClass(newObject(root, sf.subjectKey()), sf);
});
}
diff --git a/framework/src/onos/cli/src/main/java/org/onosproject/cli/net/AddMplsIntent.java b/framework/src/onos/cli/src/main/java/org/onosproject/cli/net/AddMplsIntent.java
index 1929b726..a736f99a 100644
--- a/framework/src/onos/cli/src/main/java/org/onosproject/cli/net/AddMplsIntent.java
+++ b/framework/src/onos/cli/src/main/java/org/onosproject/cli/net/AddMplsIntent.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.cli.net;
import org.apache.karaf.shell.commands.Argument;
diff --git a/framework/src/onos/cli/src/main/java/org/onosproject/cli/net/LinkResourceTestCommand.java b/framework/src/onos/cli/src/main/java/org/onosproject/cli/net/LinkResourceTestCommand.java
index d68084c7..12e9ab5f 100644
--- a/framework/src/onos/cli/src/main/java/org/onosproject/cli/net/LinkResourceTestCommand.java
+++ b/framework/src/onos/cli/src/main/java/org/onosproject/cli/net/LinkResourceTestCommand.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.cli.net;
import java.util.Set;
diff --git a/framework/src/onos/cli/src/main/java/org/onosproject/cli/net/PacketProcessorsListCommand.java b/framework/src/onos/cli/src/main/java/org/onosproject/cli/net/PacketProcessorsListCommand.java
new file mode 100644
index 00000000..ff66b803
--- /dev/null
+++ b/framework/src/onos/cli/src/main/java/org/onosproject/cli/net/PacketProcessorsListCommand.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.cli.net;
+
+import org.apache.karaf.shell.commands.Command;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.net.packet.PacketProcessor;
+import org.onosproject.net.packet.PacketService;
+
+import static org.onosproject.net.packet.PacketProcessor.ADVISOR_MAX;
+import static org.onosproject.net.packet.PacketProcessor.DIRECTOR_MAX;
+
+/**
+ * Lists packet processors.
+ */
+@Command(scope = "onos", name = "packet-processors",
+ description = "Lists packet processors")
+public class PacketProcessorsListCommand extends AbstractShellCommand {
+
+ private static final String FMT = "priority=%s, class=%s";
+
+ @Override
+ protected void execute() {
+ PacketService service = get(PacketService.class);
+ if (outputJson()) {
+ // TODO: implement this
+ print("Not implemented.");
+ } else {
+ service.getProcessors().forEach(this::print);
+ }
+ }
+
+ private void print(int priority, PacketProcessor processor) {
+ print(FMT, priorityFormat(priority), processor.getClass().getName());
+ }
+
+ private String priorityFormat(int priority) {
+ if (priority > DIRECTOR_MAX) {
+ return "observer(" + (priority - DIRECTOR_MAX - 1) + ")";
+ } else if (priority > ADVISOR_MAX) {
+ return "director(" + (priority - ADVISOR_MAX - 1) + ")";
+ }
+ return "advisor(" + (priority - 1) + ")";
+ }
+
+}
diff --git a/framework/src/onos/cli/src/main/java/org/onosproject/cli/net/PacketRequestsListCommand.java b/framework/src/onos/cli/src/main/java/org/onosproject/cli/net/PacketRequestsListCommand.java
new file mode 100644
index 00000000..9bdeadb3
--- /dev/null
+++ b/framework/src/onos/cli/src/main/java/org/onosproject/cli/net/PacketRequestsListCommand.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.cli.net;
+
+import org.apache.karaf.shell.commands.Command;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.net.packet.PacketRequest;
+import org.onosproject.net.packet.PacketService;
+
+/**
+ * Lists packet requests.
+ */
+@Command(scope = "onos", name = "packet-requests",
+ description = "Lists packet requests")
+public class PacketRequestsListCommand extends AbstractShellCommand {
+
+ private static final String FMT = "priority=%s, appId=%s, criteria=%s";
+
+ @Override
+ protected void execute() {
+ PacketService service = get(PacketService.class);
+ if (outputJson()) {
+ // TODO: implement this
+ print("Not implemented.");
+ } else {
+ service.getRequests().forEach(this::print);
+ }
+ }
+
+ private void print(PacketRequest request) {
+ print(FMT, request.priority(), request.appId().name(), request.selector().criteria());
+ }
+
+}
diff --git a/framework/src/onos/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/framework/src/onos/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
index 640868fa..459ffa96 100644
--- a/framework/src/onos/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ b/framework/src/onos/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -331,9 +331,6 @@
</completers>
</command>
<command>
- <action class="org.onosproject.cli.net.AddressBindingsListCommand"/>
- </command>
- <command>
<action class="org.onosproject.cli.net.InterfacesListCommand"/>
</command>
@@ -354,6 +351,13 @@
</command>
<command>
+ <action class="org.onosproject.cli.net.PacketRequestsListCommand"/>
+ </command>
+ <command>
+ <action class="org.onosproject.cli.net.PacketProcessorsListCommand"/>
+ </command>
+
+ <command>
<action class="org.onosproject.cli.net.AddTestFlowsCommand"/>
</command>
<command>
diff --git a/framework/src/onos/core/api/pom.xml b/framework/src/onos/core/api/pom.xml
index 7cfb4acc..23a051c4 100644
--- a/framework/src/onos/core/api/pom.xml
+++ b/framework/src/onos/core/api/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-core</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/cluster/ClusterDefinitionService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/cluster/ClusterDefinitionService.java
index dbe5f71c..1ee78b15 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/cluster/ClusterDefinitionService.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/cluster/ClusterDefinitionService.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.cluster;
import java.util.Set;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/cluster/ControllerNode.java b/framework/src/onos/core/api/src/main/java/org/onosproject/cluster/ControllerNode.java
index 3cfc9367..2f74ae69 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/cluster/ControllerNode.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/cluster/ControllerNode.java
@@ -23,7 +23,7 @@ import org.onlab.packet.IpAddress;
public interface ControllerNode {
/** Represents the operational state of the instance. */
- public enum State {
+ enum State {
/**
* Signifies that the instance is active and operating normally.
*/
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/core/CoreService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/core/CoreService.java
index 3dfc6b26..303ad395 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/core/CoreService.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/core/CoreService.java
@@ -27,12 +27,12 @@ public interface CoreService {
/**
* Name of the core "application".
*/
- static final String CORE_APP_NAME = "org.onosproject.core";
+ String CORE_APP_NAME = "org.onosproject.core";
/**
* Identifier of the core "provider".
*/
- static final ProviderId CORE_PROVIDER_ID = new ProviderId("core", CORE_APP_NAME);
+ ProviderId CORE_PROVIDER_ID = new ProviderId("core", CORE_APP_NAME);
/**
* Returns the product version.
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/core/MetricsHelper.java b/framework/src/onos/core/api/src/main/java/org/onosproject/core/MetricsHelper.java
index b5be0944..8de05439 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/core/MetricsHelper.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/core/MetricsHelper.java
@@ -32,7 +32,7 @@ public interface MetricsHelper {
*
* @return MetricService instance
*/
- abstract MetricsService metricsService();
+ MetricsService metricsService();
/**
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Device.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/Device.java
index d9001825..ffbf7f96 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Device.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/Device.java
@@ -25,7 +25,7 @@ public interface Device extends Element {
/**
* Coarse classification of the type of the infrastructure device.
*/
- public enum Type {
+ enum Type {
SWITCH, ROUTER, ROADM, OTN, ROADM_OTN, FIREWALL, BALANCER, IPS, IDS, CONTROLLER,
VIRTUAL, FIBER_SWITCH, MICROWAVE, OTHER
}
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/IpElementId.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/IpElementId.java
index 9e19b624..aba8ae47 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/IpElementId.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/IpElementId.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.net;
import java.util.Objects;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicLinkConfig.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicLinkConfig.java
index b6068ee7..e962110c 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicLinkConfig.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicLinkConfig.java
@@ -17,6 +17,7 @@ package org.onosproject.net.config.basics;
import org.onosproject.net.Link;
import org.onosproject.net.LinkKey;
+import com.fasterxml.jackson.databind.JsonNode;
import java.time.Duration;
@@ -28,6 +29,7 @@ public class BasicLinkConfig extends AllowedEntityConfig<LinkKey> {
public static final String TYPE = "type";
public static final String LATENCY = "latency";
public static final String BANDWIDTH = "bandwidth";
+ public static final String IS_DURABLE = "durable";
/**
* Returns the link type.
@@ -87,4 +89,26 @@ public class BasicLinkConfig extends AllowedEntityConfig<LinkKey> {
return (BasicLinkConfig) setOrClear(BANDWIDTH, bandwidth);
}
+ /**
+ * Returns if link is durable in the network model or not.
+ *
+ * @return true for durable, false otherwise
+ */
+ public Boolean isDurable() {
+ JsonNode res = object.path(IS_DURABLE);
+ if (res.isMissingNode()) {
+ return null;
+ }
+ return res.asBoolean();
+ }
+
+ /**
+ * Sets durability for this link.
+ *
+ * @param isDurable true for durable, false otherwise
+ * @return this BasicLinkConfig
+ */
+ public BasicLinkConfig isDurable(Boolean isDurable) {
+ return (BasicLinkConfig) setOrClear(IS_DURABLE, isDurable);
+ }
}
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/OpticalPortConfig.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/OpticalPortConfig.java
index b06c4228..dfb494d6 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/OpticalPortConfig.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/OpticalPortConfig.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.net.config.basics;
import java.util.Optional;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultFlowRule.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultFlowRule.java
index 44a4d364..5492fa98 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultFlowRule.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultFlowRule.java
@@ -291,6 +291,7 @@ public class DefaultFlowRule implements FlowRule {
public static final class Builder implements FlowRule.Builder {
private FlowId flowId;
+ private ApplicationId appId;
private Integer priority;
private DeviceId deviceId;
private Integer tableId = 0;
@@ -307,7 +308,7 @@ public class DefaultFlowRule implements FlowRule {
@Override
public FlowRule.Builder fromApp(ApplicationId appId) {
- this.flowId = computeFlowId(appId);
+ this.appId = appId;
return this;
}
@@ -357,16 +358,22 @@ public class DefaultFlowRule implements FlowRule {
@Override
public FlowRule build() {
- checkNotNull(flowId != null, "Either an application" +
+ checkArgument(flowId != null || appId != null, "Either an application" +
" id or a cookie must be supplied");
- checkNotNull(selector != null, "Traffic selector cannot be null");
- checkNotNull(timeout != null || permanent != null, "Must either have " +
+ checkNotNull(selector, "Traffic selector cannot be null");
+ checkArgument(timeout != null || permanent != null, "Must either have " +
"a timeout or be permanent");
- checkNotNull(deviceId != null, "Must refer to a device");
- checkNotNull(priority != null, "Priority cannot be null");
+ checkNotNull(deviceId, "Must refer to a device");
+ checkNotNull(priority, "Priority cannot be null");
checkArgument(priority >= MIN_PRIORITY, "Priority cannot be less than " +
MIN_PRIORITY);
+ // Computing a flow ID based on appId takes precedence over setting
+ // the flow ID directly
+ if (appId != null) {
+ flowId = computeFlowId(appId);
+ }
+
return new DefaultFlowRule(deviceId, selector, treatment, priority,
flowId, permanent, timeout, tableId);
}
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java
index e446a9fe..a487cbc4 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java
@@ -25,8 +25,8 @@ import org.onosproject.net.DeviceId;
*/
public interface FlowRule {
- static final int MAX_TIMEOUT = 60;
- static final int MIN_PRIORITY = 0;
+ int MAX_TIMEOUT = 60;
+ int MIN_PRIORITY = 0;
/**
* The FlowRule type is used to determine in which table the flow rule needs
@@ -36,7 +36,7 @@ public interface FlowRule {
* @deprecated in Cardinal Release
*/
@Deprecated
- static enum Type {
+ enum Type {
/*
* Default type - used in flow rule for single table switch NOTE: this
* setting should not be used as Table 0 in a multi-table pipeline
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleExtPayLoad.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleExtPayLoad.java
index 8d36be49..d4d2d9ec 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleExtPayLoad.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleExtPayLoad.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.net.flow;
import static com.google.common.base.MoreObjects.toStringHelper;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java
index e2971158..d4f959c3 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java
@@ -32,7 +32,7 @@ public interface FlowRuleService
/**
* The topic used for obtaining globally unique ids.
*/
- static String FLOW_OP_TOPIC = "flow-ops-ids";
+ String FLOW_OP_TOPIC = "flow-ops-ids";
/**
* Returns the number of flow rules in the system.
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/TrafficSelector.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/TrafficSelector.java
index f2de9a0f..534f6b9e 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/TrafficSelector.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/TrafficSelector.java
@@ -24,7 +24,6 @@ import org.onlab.packet.MplsLabel;
import org.onlab.packet.TpPort;
import org.onlab.packet.VlanId;
import org.onosproject.net.PortNumber;
-import org.onosproject.net.flow.DefaultTrafficSelector.Builder;
import org.onosproject.net.flow.criteria.Criterion;
/**
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/MplsBosCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/MplsBosCriterion.java
index 1ace8931..c8b6690d 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/MplsBosCriterion.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/MplsBosCriterion.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.net.flow.criteria;
import static com.google.common.base.MoreObjects.toStringHelper;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/Objective.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/Objective.java
index 090c298c..6ac7a7a2 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/Objective.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/Objective.java
@@ -26,9 +26,9 @@ import java.util.Optional;
@Beta
public interface Objective {
- static final boolean DEFAULT_PERMANENT = true;
- static final int DEFAULT_TIMEOUT = 0;
- static final int DEFAULT_PRIORITY = 32768;
+ boolean DEFAULT_PERMANENT = true;
+ int DEFAULT_TIMEOUT = 0;
+ int DEFAULT_PRIORITY = 32768;
/**
* Type of operation.
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostAdminService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostAdminService.java
index d620fedb..8676e46a 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostAdminService.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostAdminService.java
@@ -15,7 +15,6 @@
*/
package org.onosproject.net.host;
-import org.onosproject.net.ConnectPoint;
import org.onosproject.net.HostId;
/**
@@ -30,37 +29,4 @@ public interface HostAdminService extends HostService {
*/
void removeHost(HostId hostId);
- /**
- * Binds IP and MAC addresses to the given connection point.
- * <p>
- * The addresses are added to the set of addresses already bound to the
- * connection point.
- *
- * @param addresses address object containing addresses to add and the port
- * to add them to
- * @deprecated in Drake release: address info now stored in InterfaceService
- */
- @Deprecated
- void bindAddressesToPort(PortAddresses addresses);
-
- /**
- * Removes the addresses contained in the given PortAddresses object from
- * the set of addresses bound to the port.
- *
- * @param portAddresses set of addresses to remove and port to remove them
- * from
- * @deprecated in Drake release: address info now stored in InterfaceService
- */
- @Deprecated
- void unbindAddressesFromPort(PortAddresses portAddresses);
-
- /**
- * Removes all address information for the given connection point.
- *
- * @param connectPoint the connection point to remove address information
- * @deprecated in Drake release: address info now stored in InterfaceService
- */
- @Deprecated
- void clearAddresses(ConnectPoint connectPoint);
-
}
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostProviderService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostProviderService.java
index 8678a297..f7b7c499 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostProviderService.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostProviderService.java
@@ -30,7 +30,20 @@ public interface HostProviderService extends ProviderService<HostProvider> {
* @param hostId id of the host that been detected
* @param hostDescription description of host and its location
*/
- void hostDetected(HostId hostId, HostDescription hostDescription);
+ @Deprecated
+ default void hostDetected(HostId hostId, HostDescription hostDescription) {
+ hostDetected(hostId, hostDescription, false);
+ }
+
+ /**
+ * Notifies the core when a host has been detected on a network along with
+ * information that identifies the host location.
+ *
+ * @param hostId id of the host that been detected
+ * @param hostDescription description of host and its location
+ * @param replaceIps replace IP set if true, merge IP set otherwise
+ */
+ void hostDetected(HostId hostId, HostDescription hostDescription, boolean replaceIps);
/**
* Notifies the core when a host is no longer detected on a network.
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostService.java
index be114f05..39012159 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostService.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostService.java
@@ -123,24 +123,4 @@ public interface HostService
*/
void requestMac(IpAddress ip);
- /**
- * Returns the addresses information for all connection points.
- *
- * @return the set of address bindings for all connection points
- * @deprecated in Drake release: use InterfaceService instead
- */
- @Deprecated
- Set<PortAddresses> getAddressBindings();
-
- /**
- * Retrieves the addresses that have been bound to the given connection
- * point.
- *
- * @param connectPoint the connection point to retrieve address bindings for
- * @return addresses bound to the port
- * @deprecated in Drake release: use InterfaceService instead
- */
- @Deprecated
- Set<PortAddresses> getAddressBindingsForPort(ConnectPoint connectPoint);
-
}
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostStore.java
index ca11a942..5894fe92 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostStore.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostStore.java
@@ -39,12 +39,13 @@ public interface HostStore extends Store<HostEvent, HostStoreDelegate> {
* @param providerId provider identification
* @param hostId host identification
* @param hostDescription host description data
+ * @param replaceIps replace IP set if true, merge IP set otherwise
* @return appropriate event or null if no change resulted
*/
HostEvent createOrUpdateHost(ProviderId providerId, HostId hostId,
- HostDescription hostDescription);
+ HostDescription hostDescription,
+ boolean replaceIps);
- // FIXME: API to remove only IpAddress is missing
/**
* Removes the specified host from the inventory.
*
@@ -115,53 +116,4 @@ public interface HostStore extends Store<HostEvent, HostStoreDelegate> {
*/
Set<Host> getConnectedHosts(DeviceId deviceId);
- /**
- * Updates the address information for a given port. The given address
- * information is added to any previously held information for the port.
- *
- * @param addresses the port and address information
- * @deprecated in Drake release: address info now stored in InterfaceService
- */
- @Deprecated
- void updateAddressBindings(PortAddresses addresses);
-
- /**
- * Removes the given addresses from the set of address information held for
- * a port.
- *
- * @param addresses the port and address information
- * @deprecated in Drake release: address info now stored in InterfaceService
- */
- @Deprecated
- void removeAddressBindings(PortAddresses addresses);
-
- /**
- * Removes any previously stored address information for a given connection
- * point.
- *
- * @param connectPoint the connection point
- * @deprecated in Drake release: address info now stored in InterfaceService
- */
- @Deprecated
- void clearAddressBindings(ConnectPoint connectPoint);
-
- /**
- * Returns the address bindings stored for all connection points.
- *
- * @return the set of address bindings
- * @deprecated in Drake release: address info now stored in InterfaceService
- */
- @Deprecated
- Set<PortAddresses> getAddressBindings();
-
- /**
- * Returns the address bindings for a particular connection point.
- *
- * @param connectPoint the connection point to return address information
- * for
- * @return address information for the connection point
- * @deprecated in Drake release: address info now stored in InterfaceService
- */
- @Deprecated
- Set<PortAddresses> getAddressBindingsForPort(ConnectPoint connectPoint);
}
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsIntent.java
index bf469dbe..7df3c81e 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsIntent.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsIntent.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.net.intent;
import java.util.Collections;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java
index 3c3c45ce..caa5fbb9 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.net.intent;
import java.util.List;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PathIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PathIntent.java
index dffbabfe..0c831fd5 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PathIntent.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PathIntent.java
@@ -25,7 +25,6 @@ import org.onosproject.net.flow.TrafficSelector;
import org.onosproject.net.flow.TrafficTreatment;
import com.google.common.base.MoreObjects;
-import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import static com.google.common.base.Preconditions.checkArgument;
@@ -159,12 +158,8 @@ public class PathIntent extends ConnectivityIntent {
* @param links links to be validated
*/
public static void validate(List<Link> links) {
- checkArgument(Iterables.all(links, new Predicate<Link>() {
- @Override
- public boolean apply(Link link) {
- return !link.src().elementId().equals(link.dst().elementId());
- }
- }), "element of src and dst in a link must be different: {}", links);
+ checkArgument(Iterables.all(links, link -> !link.src().elementId().equals(link.dst().elementId())),
+ "element of src and dst in a link must be different: {}", links);
boolean adjacentSame = true;
for (int i = 0; i < links.size() - 1; i++) {
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceStore.java
index fc2eba70..5a034b4d 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceStore.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceStore.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.net.newresource;
import com.google.common.annotations.Beta;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketPriority.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketPriority.java
index 68c0a838..3eab9386 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketPriority.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketPriority.java
@@ -34,7 +34,7 @@ public enum PacketPriority {
private final int priorityValue;
- private PacketPriority(int priorityValue) {
+ PacketPriority(int priorityValue) {
this.priorityValue = priorityValue;
}
@@ -50,4 +50,4 @@ public enum PacketPriority {
public String toString() {
return String.valueOf(priorityValue);
}
-} \ No newline at end of file
+}
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProcessor.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProcessor.java
index 98886775..0eba1b4e 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProcessor.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProcessor.java
@@ -22,9 +22,9 @@ import static com.google.common.base.Preconditions.checkArgument;
*/
public interface PacketProcessor {
- static final int ADVISOR_MAX = Integer.MAX_VALUE / 3;
- static final int DIRECTOR_MAX = (Integer.MAX_VALUE / 3) * 2;
- static final int OBSERVER_MAX = Integer.MAX_VALUE;
+ int ADVISOR_MAX = Integer.MAX_VALUE / 3;
+ int DIRECTOR_MAX = (Integer.MAX_VALUE / 3) * 2;
+ int OBSERVER_MAX = Integer.MAX_VALUE;
/**
* Returns a priority in the ADVISOR range, where processors can take early action and
@@ -38,7 +38,7 @@ public interface PacketProcessor {
static int advisor(int priority) {
int overallPriority = priority + 1;
checkArgument(overallPriority > 0 && overallPriority <= ADVISOR_MAX,
- "Priority not within ADVISOR range");
+ "Priority not within ADVISOR range");
return overallPriority;
}
@@ -53,7 +53,7 @@ public interface PacketProcessor {
static int director(int priority) {
int overallPriority = ADVISOR_MAX + priority + 1;
checkArgument(overallPriority > ADVISOR_MAX && overallPriority <= DIRECTOR_MAX,
- "Priority not within DIRECTOR range");
+ "Priority not within DIRECTOR range");
return overallPriority;
}
@@ -68,8 +68,8 @@ public interface PacketProcessor {
*/
static int observer(int priority) {
int overallPriority = DIRECTOR_MAX + priority + 1;
- checkArgument(overallPriority > DIRECTOR_MAX && overallPriority <= OBSERVER_MAX,
- "Priority not within OBSERVER range");
+ checkArgument(overallPriority > DIRECTOR_MAX,
+ "Priority not within OBSERVER range");
return overallPriority;
}
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketService.java
index 06c416ec..98f4d8e0 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketService.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketService.java
@@ -15,9 +15,13 @@
*/
package org.onosproject.net.packet;
+import com.google.common.annotations.Beta;
import org.onosproject.core.ApplicationId;
import org.onosproject.net.flow.TrafficSelector;
+import java.util.List;
+import java.util.Map;
+
/**
* Service for intercepting data plane packets and for emitting synthetic
* outbound packets.
@@ -48,6 +52,15 @@ public interface PacketService {
void removeProcessor(PacketProcessor processor);
/**
+ * Returns priority bindings of all registered packet processors.
+ *
+ * @return list of existing packet processors
+ */
+ @Beta
+ // TODO: Consider returning list of PacketProcessorEntry with processor, priority and stats
+ Map<Integer, PacketProcessor> getProcessors();
+
+ /**
* Requests that packets matching the given selector are punted from the
* dataplane to the controller.
*
@@ -70,6 +83,13 @@ public interface PacketService {
ApplicationId appId);
/**
+ * Returns list of all existing requests ordered by priority.
+ *
+ * @return list of existing packet requests
+ */
+ List<PacketRequest> getRequests();
+
+ /**
* Emits the specified outbound packet onto the network.
*
* @param packet outbound packet
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketStore.java
index ff45cc0c..97f7cb55 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketStore.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketStore.java
@@ -17,7 +17,7 @@ package org.onosproject.net.packet;
import org.onosproject.store.Store;
-import java.util.Set;
+import java.util.List;
/**
* Manages routing of outbound packets.
@@ -52,8 +52,8 @@ public interface PacketStore extends Store<PacketEvent, PacketStoreDelegate> {
/**
* Obtains all existing requests in the system.
*
- * @return a set of packet requests
+ * @return list of packet requests in order of priority
*/
- Set<PacketRequest> existingRequests();
+ List<PacketRequest> existingRequests();
}
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/proxyarp/ProxyArpService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/proxyarp/ProxyArpService.java
index 8ffe17a4..9b27f4f8 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/proxyarp/ProxyArpService.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/proxyarp/ProxyArpService.java
@@ -21,7 +21,7 @@ import org.onosproject.net.ConnectPoint;
import org.onosproject.net.packet.PacketContext;
/**
- * Service for processing arp requests on behalf of applications.
+ * Service for processing ARP or NDP requests on behalf of applications.
*/
// TODO: move to the peer host package
public interface ProxyArpService {
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/security/AppGuard.java b/framework/src/onos/core/api/src/main/java/org/onosproject/security/AppGuard.java
index 800135f4..4b80dfcd 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/security/AppGuard.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/security/AppGuard.java
@@ -17,9 +17,12 @@
package org.onosproject.security;
+import com.google.common.annotations.Beta;
+
/**
* Aids SM-ONOS to perform API-level permission checking.
*/
+@Beta
public final class AppGuard {
private AppGuard() {
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/security/AppPermission.java b/framework/src/onos/core/api/src/main/java/org/onosproject/security/AppPermission.java
index 21a70d2b..09fe17a8 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/security/AppPermission.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/security/AppPermission.java
@@ -16,11 +16,14 @@
package org.onosproject.security;
+import com.google.common.annotations.Beta;
+
import java.security.BasicPermission;
/**
* Implementation of API access permission.
*/
+@Beta
public class AppPermission extends BasicPermission {
public enum Type {
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/security/Permission.java b/framework/src/onos/core/api/src/main/java/org/onosproject/security/Permission.java
index 75d9433f..0c874c9d 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/security/Permission.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/security/Permission.java
@@ -16,6 +16,9 @@
package org.onosproject.security;
+import com.google.common.annotations.Beta;
+
+@Beta
public class Permission {
protected String classname;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/security/SecurityAdminService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/security/SecurityAdminService.java
index 16ea94d1..30d143c0 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/security/SecurityAdminService.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/security/SecurityAdminService.java
@@ -16,6 +16,7 @@
package org.onosproject.security;
+import com.google.common.annotations.Beta;
import org.onosproject.core.ApplicationId;
import java.security.Permission;
@@ -25,6 +26,7 @@ import java.util.Map;
/**
* Security-Mode ONOS service.
*/
+@Beta
public interface SecurityAdminService {
/**
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/security/SecurityUtil.java b/framework/src/onos/core/api/src/main/java/org/onosproject/security/SecurityUtil.java
index 34b4e78a..444b6bb5 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/security/SecurityUtil.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/security/SecurityUtil.java
@@ -16,6 +16,7 @@
package org.onosproject.security;
+import com.google.common.annotations.Beta;
import org.onlab.osgi.DefaultServiceDirectory;
import org.onlab.osgi.ServiceDirectory;
import org.onlab.osgi.ServiceNotFoundException;
@@ -24,6 +25,7 @@ import org.onosproject.core.ApplicationId;
/**
* Utility class to aid Security-Mode ONOS.
*/
+@Beta
public final class SecurityUtil {
protected static ServiceDirectory serviceDirectory = new DefaultServiceDirectory();
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/store/service/DatabaseUpdate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/store/service/DatabaseUpdate.java
index 8cac5968..a62d3823 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/store/service/DatabaseUpdate.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/store/service/DatabaseUpdate.java
@@ -31,7 +31,7 @@ public final class DatabaseUpdate {
/**
* Type of database update operation.
*/
- public static enum Type {
+ public enum Type {
/**
* Insert/Update entry without any checks.
*/
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiTopoOverlay.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiTopoOverlay.java
index 2889422a..e0d7d239 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiTopoOverlay.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiTopoOverlay.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiTopoOverlayFactory.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiTopoOverlayFactory.java
index bd2f2fe6..61bc0c23 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiTopoOverlayFactory.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiTopoOverlayFactory.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/CellComparator.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/CellComparator.java
index 84d11344..1c42c97a 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/CellComparator.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/CellComparator.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/CellFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/CellFormatter.java
index 854ac27f..895c9d93 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/CellFormatter.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/CellFormatter.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AbstractCellComparator.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AbstractCellComparator.java
index 6113fc3f..31d9f634 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AbstractCellComparator.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AbstractCellComparator.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AbstractCellFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AbstractCellFormatter.java
index 33ce2ab5..08822b7b 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AbstractCellFormatter.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AbstractCellFormatter.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AppIdFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AppIdFormatter.java
index 42d684b6..0e1c248b 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AppIdFormatter.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AppIdFormatter.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/ConnectPointFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/ConnectPointFormatter.java
index fee26154..4af6fe2f 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/ConnectPointFormatter.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/ConnectPointFormatter.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/DefaultCellComparator.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/DefaultCellComparator.java
index 093a20d3..2386f8f3 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/DefaultCellComparator.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/DefaultCellComparator.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/DefaultCellFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/DefaultCellFormatter.java
index 0efa2ebd..8309c545 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/DefaultCellFormatter.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/DefaultCellFormatter.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/HexFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/HexFormatter.java
index e09982ea..981a81bb 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/HexFormatter.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/HexFormatter.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/HostLocationFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/HostLocationFormatter.java
index fe87c61b..95a7cc23 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/HostLocationFormatter.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/HostLocationFormatter.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/TimeFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/TimeFormatter.java
index 44dc1940..58c70930 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/TimeFormatter.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/TimeFormatter.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/AbstractHighlight.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/AbstractHighlight.java
index ab2ced36..d30ba2f6 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/AbstractHighlight.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/AbstractHighlight.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BaseLink.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BaseLink.java
index c37c129b..a40383b8 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BaseLink.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BaseLink.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BaseLinkMap.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BaseLinkMap.java
index 720eca49..cc2cf4af 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BaseLinkMap.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BaseLinkMap.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BiLink.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BiLink.java
index 8c95e15d..1217faae 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BiLink.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BiLink.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BiLinkMap.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BiLinkMap.java
index 7bc0e65d..9a42e107 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BiLinkMap.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BiLinkMap.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/ButtonId.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/ButtonId.java
index ca2ecccd..05b7317d 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/ButtonId.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/ButtonId.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java
index 2985d3d4..0ce6592c 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/Highlights.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/Highlights.java
index be59c26b..12d3b629 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/Highlights.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/Highlights.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/HostHighlight.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/HostHighlight.java
index 76669a84..48959496 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/HostHighlight.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/HostHighlight.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/LinkHighlight.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/LinkHighlight.java
index b4e43304..a734c6b7 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/LinkHighlight.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/LinkHighlight.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/Mod.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/Mod.java
index d21a8724..b11ddecd 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/Mod.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/Mod.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeHighlight.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeHighlight.java
index 735f8166..61e10c56 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeHighlight.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeHighlight.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeSelection.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeSelection.java
index b284de1b..4aed9038 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeSelection.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeSelection.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/PropertyPanel.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/PropertyPanel.java
index 121e0834..a165be33 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/PropertyPanel.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/PropertyPanel.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoConstants.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoConstants.java
index 38a8f036..0f42b628 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoConstants.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoConstants.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoElementType.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoElementType.java
index dc327464..39947440 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoElementType.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoElementType.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java
index a94068ee..8df03169 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoUtils.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoUtils.java
index f92d5798..b38a7f7d 100644
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoUtils.java
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoUtils.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/event/EventDeliveryServiceAdapter.java b/framework/src/onos/core/api/src/test/java/org/onosproject/event/EventDeliveryServiceAdapter.java
index 6d5e8934..b81155e6 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/event/EventDeliveryServiceAdapter.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/event/EventDeliveryServiceAdapter.java
@@ -17,8 +17,6 @@ package org.onosproject.event;
import java.util.Set;
-import static org.junit.Assert.*;
-
/**
* Testing adapter for the event delivery service.
*/
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/net/OchSignalTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/net/OchSignalTest.java
index c171d523..1ab17293 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/net/OchSignalTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/net/OchSignalTest.java
@@ -18,8 +18,6 @@ package org.onosproject.net;
import com.google.common.testing.EqualsTester;
import org.junit.Test;
-import static org.junit.Assert.*;
-
/**
* Test for OchSignal.
*/
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/net/device/DeviceClockServiceAdapter.java b/framework/src/onos/core/api/src/test/java/org/onosproject/net/device/DeviceClockServiceAdapter.java
index 5bfdd76b..7b43da6a 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/net/device/DeviceClockServiceAdapter.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/net/device/DeviceClockServiceAdapter.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.net.device;
import org.onosproject.net.DeviceId;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/net/device/DeviceServiceAdapter.java b/framework/src/onos/core/api/src/test/java/org/onosproject/net/device/DeviceServiceAdapter.java
index 795e4c0a..5f52f6db 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/net/device/DeviceServiceAdapter.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/net/device/DeviceServiceAdapter.java
@@ -15,7 +15,6 @@
*/
package org.onosproject.net.device;
-import com.google.common.base.Predicate;
import com.google.common.collect.FluentIterable;
import org.onosproject.net.Device;
@@ -45,13 +44,7 @@ public class DeviceServiceAdapter implements DeviceService {
@Override
public Iterable<Device> getAvailableDevices() {
return FluentIterable.from(getDevices())
- .filter(new Predicate<Device>() {
-
- @Override
- public boolean apply(Device input) {
- return isAvailable(input.id());
- }
- });
+ .filter(input -> isAvailable(input.id()));
}
@Override
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/net/flow/FlowRuleExtPayLoadTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/net/flow/FlowRuleExtPayLoadTest.java
index 30326a2e..7a61f823 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/net/flow/FlowRuleExtPayLoadTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/net/flow/FlowRuleExtPayLoadTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.net.flow;
import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/net/host/HostServiceAdapter.java b/framework/src/onos/core/api/src/test/java/org/onosproject/net/host/HostServiceAdapter.java
index 226dad06..0fad54a8 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/net/host/HostServiceAdapter.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/net/host/HostServiceAdapter.java
@@ -15,15 +15,15 @@
*/
package org.onosproject.net.host;
-import java.util.Set;
-
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
import org.onosproject.net.Host;
import org.onosproject.net.HostId;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.VlanId;
+
+import java.util.Set;
/**
* Test adapter for host service.
@@ -89,14 +89,4 @@ public class HostServiceAdapter implements HostService {
public void removeListener(HostListener listener) {
}
- @Override
- public Set<PortAddresses> getAddressBindings() {
- return null;
- }
-
- @Override
- public Set<PortAddresses> getAddressBindingsForPort(ConnectPoint connectPoint) {
- return null;
- }
-
}
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/FakeIntentManager.java b/framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/FakeIntentManager.java
index 9b9f7cec..a33d3692 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/FakeIntentManager.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/FakeIntentManager.java
@@ -49,30 +49,23 @@ public class FakeIntentManager implements TestableIntentService {
// Provides an out-of-thread simulation of intent submit life-cycle
private void executeSubmit(final Intent intent) {
registerSubclassCompilerIfNeeded(intent);
- executor.execute(new Runnable() {
- @Override
- public void run() {
- try {
- executeCompilingPhase(intent);
- } catch (IntentException e) {
- exceptions.add(e);
- }
+ executor.execute(() -> {
+ try {
+ executeCompilingPhase(intent);
+ } catch (IntentException e) {
+ exceptions.add(e);
}
});
}
// Provides an out-of-thread simulation of intent withdraw life-cycle
private void executeWithdraw(final Intent intent) {
- executor.execute(new Runnable() {
- @Override
- public void run() {
- try {
- List<Intent> installable = getInstallable(intent.key());
- executeWithdrawingPhase(intent, installable);
- } catch (IntentException e) {
- exceptions.add(e);
- }
-
+ executor.execute(() -> {
+ try {
+ List<Intent> installable = getInstallable(intent.key());
+ executeWithdrawingPhase(intent, installable);
+ } catch (IntentException e) {
+ exceptions.add(e);
}
});
}
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
index 60857cac..0067fb2d 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
@@ -79,13 +79,8 @@ public class IntentServiceTest {
service.submit(intent);
// Allow a small window of time until the intent is in the expected state
- TestTools.assertAfter(GRACE_MS, new Runnable() {
- @Override
- public void run() {
- assertEquals("incorrect intent state", IntentState.INSTALLED,
- service.getIntentState(intent.key()));
- }
- });
+ TestTools.assertAfter(GRACE_MS, () ->
+ assertEquals("incorrect intent state", IntentState.INSTALLED, service.getIntentState(intent.key())));
// Make sure that all expected events have been emitted
validateEvents(intent, INSTALL_REQ, INSTALLED);
@@ -100,13 +95,8 @@ public class IntentServiceTest {
service.withdraw(intent);
// Allow a small window of time until the event is in the expected state
- TestTools.assertAfter(GRACE_MS, new Runnable() {
- @Override
- public void run() {
- assertEquals("incorrect intent state", IntentState.WITHDRAWN,
- service.getIntentState(intent.key()));
- }
- });
+ TestTools.assertAfter(GRACE_MS, () ->
+ assertEquals("incorrect intent state", IntentState.WITHDRAWN, service.getIntentState(intent.key())));
// Make sure that all expected events have been emitted
validateEvents(intent, WITHDRAWN);
@@ -128,13 +118,8 @@ public class IntentServiceTest {
service.submit(intent);
// Allow a small window of time until the intent is in the expected state
- TestTools.assertAfter(GRACE_MS, new Runnable() {
- @Override
- public void run() {
- assertEquals("incorrect intent state", IntentState.FAILED,
- service.getIntentState(intent.key()));
- }
- });
+ TestTools.assertAfter(GRACE_MS, () ->
+ assertEquals("incorrect intent state", IntentState.FAILED, service.getIntentState(intent.key())));
// Make sure that all expected events have been emitted
validateEvents(intent, INSTALL_REQ, FAILED);
@@ -196,13 +181,8 @@ public class IntentServiceTest {
service.submit(intent);
// Allow some time for the intent to be compiled and installed
- TestTools.assertAfter(GRACE_MS, new Runnable() {
- @Override
- public void run() {
- assertEquals("incorrect intent state", IntentState.INSTALLED,
- service.getIntentState(intent.key()));
- }
- });
+ TestTools.assertAfter(GRACE_MS, () ->
+ assertEquals("incorrect intent state", IntentState.INSTALLED, service.getIntentState(intent.key())));
// Make sure that now we have an implicit registration of the compiler
// under the intent subclass
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/PartitionServiceAdapter.java b/framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/PartitionServiceAdapter.java
index ffb2635e..2a38cbb3 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/PartitionServiceAdapter.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/PartitionServiceAdapter.java
@@ -17,8 +17,6 @@ package org.onosproject.net.intent;
import org.onosproject.cluster.NodeId;
-import static org.junit.Assert.*;
-
/**
* Testing adapter for the partition service.
*/
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/net/link/LinkServiceAdapter.java b/framework/src/onos/core/api/src/test/java/org/onosproject/net/link/LinkServiceAdapter.java
index 5cb84b31..7cd87cd1 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/net/link/LinkServiceAdapter.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/net/link/LinkServiceAdapter.java
@@ -22,7 +22,6 @@ import org.onosproject.net.DeviceId;
import org.onosproject.net.Link;
import org.onosproject.net.Link.State;
-import com.google.common.base.Predicate;
import com.google.common.collect.FluentIterable;
/**
@@ -42,13 +41,7 @@ public class LinkServiceAdapter implements LinkService {
@Override
public Iterable<Link> getActiveLinks() {
return FluentIterable.from(getLinks())
- .filter(new Predicate<Link>() {
-
- @Override
- public boolean apply(Link input) {
- return input.state() == State.ACTIVE;
- }
- });
+ .filter(input -> input.state() == State.ACTIVE);
}
@Override
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/net/packet/PacketServiceAdapter.java b/framework/src/onos/core/api/src/test/java/org/onosproject/net/packet/PacketServiceAdapter.java
index afe936b7..c4386593 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/net/packet/PacketServiceAdapter.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/net/packet/PacketServiceAdapter.java
@@ -18,6 +18,9 @@ package org.onosproject.net.packet;
import org.onosproject.core.ApplicationId;
import org.onosproject.net.flow.TrafficSelector;
+import java.util.List;
+import java.util.Map;
+
/**
* Test adapter for packet service.
*/
@@ -31,6 +34,16 @@ public class PacketServiceAdapter implements PacketService {
}
@Override
+ public Map<Integer, PacketProcessor> getProcessors() {
+ return null;
+ }
+
+ @Override
+ public List<PacketRequest> getRequests() {
+ return null;
+ }
+
+ @Override
public void requestPackets(TrafficSelector selector, PacketPriority priority, ApplicationId appId) {
}
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/store/service/DatabaseUpdateTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/store/service/DatabaseUpdateTest.java
index b498c1c7..ad439d66 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/store/service/DatabaseUpdateTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/store/service/DatabaseUpdateTest.java
@@ -16,7 +16,6 @@
package org.onosproject.store.service;
import com.google.common.testing.EqualsTester;
-import junit.framework.TestCase;
import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -26,7 +25,7 @@ import static org.hamcrest.Matchers.is;
* Unit Tests for DatabseUpdate class.
*/
-public class DatabaseUpdateTest extends TestCase {
+public class DatabaseUpdateTest {
private final DatabaseUpdate stats1 = DatabaseUpdate.newBuilder()
.withCurrentValue("1".getBytes())
@@ -124,4 +123,4 @@ public class DatabaseUpdateTest extends TestCase {
assertThat(stats1.toString(), is(stats1.toString()));
}
-} \ No newline at end of file
+}
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/store/service/MapEventTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/store/service/MapEventTest.java
index c241c0e0..47fba6c9 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/store/service/MapEventTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/store/service/MapEventTest.java
@@ -16,7 +16,6 @@
package org.onosproject.store.service;
import com.google.common.testing.EqualsTester;
-import junit.framework.TestCase;
import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -25,7 +24,7 @@ import static org.hamcrest.Matchers.is;
/**
* MapEvent unit tests.
*/
-public class MapEventTest extends TestCase {
+public class MapEventTest {
private final Versioned<Integer> vStats = new Versioned<>(2, 1);
@@ -58,4 +57,4 @@ public class MapEventTest extends TestCase {
.testEquals();
}
-} \ No newline at end of file
+}
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/store/service/MultiValuedTimestampTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/store/service/MultiValuedTimestampTest.java
index 5d991a26..43475e45 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/store/service/MultiValuedTimestampTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/store/service/MultiValuedTimestampTest.java
@@ -16,7 +16,6 @@
package org.onosproject.store.service;
import com.google.common.testing.EqualsTester;
-import junit.framework.TestCase;
import org.junit.Assert;
import org.junit.Test;
@@ -31,7 +30,7 @@ import static org.hamcrest.Matchers.notNullValue;
/**
* MultiValuedTimestamp unit tests.
*/
-public class MultiValuedTimestampTest extends TestCase {
+public class MultiValuedTimestampTest {
private final MultiValuedTimestamp<Integer, Integer> stats1 = new MultiValuedTimestamp<>(1, 3);
@@ -91,4 +90,4 @@ public class MultiValuedTimestampTest extends TestCase {
Assert.fail("Exception looking up constructors");
}
}
-} \ No newline at end of file
+}
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/store/service/VersionedTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/store/service/VersionedTest.java
index 8a401db2..fbe3271b 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/store/service/VersionedTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/store/service/VersionedTest.java
@@ -16,7 +16,6 @@
package org.onosproject.store.service;
import com.google.common.testing.EqualsTester;
-import junit.framework.TestCase;
import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -25,7 +24,7 @@ import static org.hamcrest.Matchers.is;
/**
* Versioned unit tests.
*/
-public class VersionedTest extends TestCase {
+public class VersionedTest {
private final Versioned<Integer> stats1 = new Versioned<>(1, 2, 3);
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/TableUtilsTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/TableUtilsTest.java
index 7c2f2d73..4456dd3d 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/TableUtilsTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/TableUtilsTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/AbstractCellComparatorTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/AbstractCellComparatorTest.java
index 0b9af23d..30125afb 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/AbstractCellComparatorTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/AbstractCellComparatorTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/AbstractCellFormatterTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/AbstractCellFormatterTest.java
index 7a3c34bc..41fefd65 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/AbstractCellFormatterTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/AbstractCellFormatterTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/AppIdFormatterTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/AppIdFormatterTest.java
index e74fb47c..a7befbdb 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/AppIdFormatterTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/AppIdFormatterTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/ConnectPointFormatterTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/ConnectPointFormatterTest.java
index 65fd7843..f7ad2751 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/ConnectPointFormatterTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/ConnectPointFormatterTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/DefaultCellComparatorTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/DefaultCellComparatorTest.java
index 87c95288..d77c1b2b 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/DefaultCellComparatorTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/DefaultCellComparatorTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/DefaultCellFormatterTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/DefaultCellFormatterTest.java
index 6351a1f4..b63793b9 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/DefaultCellFormatterTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/DefaultCellFormatterTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/HexFormatterTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/HexFormatterTest.java
index ad23b02c..2f70d43c 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/HexFormatterTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/HexFormatterTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/HostLocationFormatterTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/HostLocationFormatterTest.java
index bfbe4541..25ec89cd 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/HostLocationFormatterTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/HostLocationFormatterTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/TimeFormatterTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/TimeFormatterTest.java
index f41d82b3..1e05ded1 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/TimeFormatterTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/table/cell/TimeFormatterTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.table.cell;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/BiLinkMapTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/BiLinkMapTest.java
index 17fcc229..83f4809c 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/BiLinkMapTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/BiLinkMapTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTest.java
index 1acc06fa..55f31ac9 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTestBase.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTestBase.java
index b5bd41ef..a6beec86 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTestBase.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/BiLinkTestBase.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/ButtonIdTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/ButtonIdTest.java
index 04c6dc18..01a1b975 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/ButtonIdTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/ButtonIdTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/HighlightsTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/HighlightsTest.java
index 7d6dfe67..fe663a5b 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/HighlightsTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/HighlightsTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/LinkHighlightTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/LinkHighlightTest.java
index 205f08ce..a88de33a 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/LinkHighlightTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/LinkHighlightTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/ModTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/ModTest.java
index bb40279c..03a18f97 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/ModTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/ModTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/NodeSelectionTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/NodeSelectionTest.java
index 60cada45..06a78580 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/NodeSelectionTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/NodeSelectionTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/PropertyPanelTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/PropertyPanelTest.java
index b08ee4dc..7e6cc227 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/PropertyPanelTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/PropertyPanelTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/TopoJsonTest.java b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/TopoJsonTest.java
index 6a3bfa43..ac0051cd 100644
--- a/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/TopoJsonTest.java
+++ b/framework/src/onos/core/api/src/test/java/org/onosproject/ui/topo/TopoJsonTest.java
@@ -12,7 +12,6 @@
* 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.onosproject.ui.topo;
diff --git a/framework/src/onos/core/common/pom.xml b/framework/src/onos/core/common/pom.xml
index 71c0fe40..e4d25eed 100644
--- a/framework/src/onos/core/common/pom.xml
+++ b/framework/src/onos/core/common/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-core</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/MockCodecContext.java b/framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/MockCodecContext.java
index 6a9b6708..c3b6d821 100644
--- a/framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/MockCodecContext.java
+++ b/framework/src/onos/core/common/src/test/java/org/onosproject/codec/impl/MockCodecContext.java
@@ -30,7 +30,7 @@ public class MockCodecContext implements CodecContext {
private final ObjectMapper mapper = new ObjectMapper();
private final CodecManager manager = new CodecManager();
- private final Map<Class<? extends Object>, Object> services = new HashMap<>();
+ private final Map<Class<?>, Object> services = new HashMap<>();
/**
* Constructs a new mock codec context.
diff --git a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java
index fc90dfad..72fc1b05 100644
--- a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java
+++ b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java
@@ -15,7 +15,6 @@
*/
package org.onosproject.store.trivial;
-import com.google.common.base.Predicate;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Maps;
@@ -134,13 +133,7 @@ public class SimpleDeviceStore
@Override
public Iterable<Device> getAvailableDevices() {
return FluentIterable.from(getDevices())
- .filter(new Predicate<Device>() {
-
- @Override
- public boolean apply(Device input) {
- return isAvailable(input.id());
- }
- });
+ .filter(input -> isAvailable(input.id()));
}
@Override
diff --git a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStoreTest.java b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStoreTest.java
index 562e6f3c..c9e135d9 100644
--- a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStoreTest.java
+++ b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStoreTest.java
@@ -479,31 +479,22 @@ public class SimpleDeviceStoreTest {
@Test
public final void testEvents() throws InterruptedException {
final CountDownLatch addLatch = new CountDownLatch(1);
- DeviceStoreDelegate checkAdd = new DeviceStoreDelegate() {
- @Override
- public void notify(DeviceEvent event) {
- assertEquals(DEVICE_ADDED, event.type());
- assertDevice(DID1, SW1, event.subject());
- addLatch.countDown();
- }
+ DeviceStoreDelegate checkAdd = event -> {
+ assertEquals(DEVICE_ADDED, event.type());
+ assertDevice(DID1, SW1, event.subject());
+ addLatch.countDown();
};
final CountDownLatch updateLatch = new CountDownLatch(1);
- DeviceStoreDelegate checkUpdate = new DeviceStoreDelegate() {
- @Override
- public void notify(DeviceEvent event) {
- assertEquals(DEVICE_UPDATED, event.type());
- assertDevice(DID1, SW2, event.subject());
- updateLatch.countDown();
- }
+ DeviceStoreDelegate checkUpdate = event -> {
+ assertEquals(DEVICE_UPDATED, event.type());
+ assertDevice(DID1, SW2, event.subject());
+ updateLatch.countDown();
};
final CountDownLatch removeLatch = new CountDownLatch(1);
- DeviceStoreDelegate checkRemove = new DeviceStoreDelegate() {
- @Override
- public void notify(DeviceEvent event) {
- assertEquals(DEVICE_REMOVED, event.type());
- assertDevice(DID1, SW2, event.subject());
- removeLatch.countDown();
- }
+ DeviceStoreDelegate checkRemove = event -> {
+ assertEquals(DEVICE_REMOVED, event.type());
+ assertDevice(DID1, SW2, event.subject());
+ removeLatch.countDown();
};
DeviceDescription description =
diff --git a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleFlowRuleStore.java b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleFlowRuleStore.java
index 3b8f1d35..c8c92aa5 100644
--- a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleFlowRuleStore.java
+++ b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleFlowRuleStore.java
@@ -15,7 +15,6 @@
*/
package org.onosproject.store.trivial;
-import com.google.common.base.Function;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.RemovalListener;
@@ -162,15 +161,7 @@ public class SimpleFlowRuleStore
public Iterable<FlowEntry> getFlowEntries(DeviceId deviceId) {
// flatten and make iterator unmodifiable
return FluentIterable.from(getFlowTable(deviceId).values())
- .transformAndConcat(
- new Function<List<StoredFlowEntry>, Iterable<? extends FlowEntry>>() {
-
- @Override
- public Iterable<? extends FlowEntry> apply(
- List<StoredFlowEntry> input) {
- return Collections.unmodifiableList(input);
- }
- });
+ .transformAndConcat(Collections::unmodifiableList);
}
@Override
diff --git a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStore.java b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStore.java
index 71de3e13..230fa339 100644
--- a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStore.java
+++ b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStore.java
@@ -55,7 +55,6 @@ import org.onosproject.net.group.StoredGroupEntry;
import org.onosproject.store.AbstractStore;
import org.slf4j.Logger;
-import com.google.common.base.Function;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.Sets;
@@ -83,8 +82,7 @@ public class SimpleGroupStore
private final ConcurrentMap<DeviceId, ConcurrentMap<GroupId, Group>>
extraneousGroupEntriesById = new ConcurrentHashMap<>();
- private final HashMap<DeviceId, Boolean> deviceAuditStatus =
- new HashMap<DeviceId, Boolean>();
+ private final HashMap<DeviceId, Boolean> deviceAuditStatus = new HashMap<>();
private final AtomicInteger groupIdGen = new AtomicInteger();
@@ -189,15 +187,7 @@ public class SimpleGroupStore
public Iterable<Group> getGroups(DeviceId deviceId) {
// flatten and make iterator unmodifiable
return FluentIterable.from(getGroupKeyTable(deviceId).values())
- .transform(
- new Function<StoredGroupEntry, Group>() {
-
- @Override
- public Group apply(
- StoredGroupEntry input) {
- return input;
- }
- });
+ .transform(input -> input);
}
/**
@@ -358,8 +348,7 @@ public class SimpleGroupStore
UpdateType type,
GroupBuckets buckets) {
GroupBuckets oldBuckets = oldGroup.buckets();
- List<GroupBucket> newBucketList = new ArrayList<GroupBucket>(
- oldBuckets.buckets());
+ List<GroupBucket> newBucketList = new ArrayList<>(oldBuckets.buckets());
boolean groupDescUpdated = false;
if (type == UpdateType.ADD) {
diff --git a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStoreTest.java b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStoreTest.java
index dd6c8a58..b10fca5c 100644
--- a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStoreTest.java
+++ b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleGroupStoreTest.java
@@ -205,10 +205,10 @@ public class SimpleGroupStoreTest {
private void testStoreAndGetGroup(GroupKey key) {
PortNumber[] ports = {PortNumber.portNumber(31),
PortNumber.portNumber(32)};
- List<PortNumber> outPorts = new ArrayList<PortNumber>();
+ List<PortNumber> outPorts = new ArrayList<>();
outPorts.addAll(Arrays.asList(ports));
- List<GroupBucket> buckets = new ArrayList<GroupBucket>();
+ List<GroupBucket> buckets = new ArrayList<>();
for (PortNumber portNumber: outPorts) {
TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder();
tBuilder.setOutput(portNumber)
@@ -271,7 +271,7 @@ public class SimpleGroupStoreTest {
Group existingGroup = simpleGroupStore.getGroup(D1, currKey);
int totalPkts = 0;
int totalBytes = 0;
- List<GroupBucket> newBucketList = new ArrayList<GroupBucket>();
+ List<GroupBucket> newBucketList = new ArrayList<>();
for (GroupBucket bucket:existingGroup.buckets().buckets()) {
StoredGroupBucketEntry newBucket =
(StoredGroupBucketEntry)
@@ -302,15 +302,15 @@ public class SimpleGroupStoreTest {
// Testing updateGroupDescription for ADD operation from northbound
private void testAddBuckets(GroupKey currKey, GroupKey addKey) {
Group existingGroup = simpleGroupStore.getGroup(D1, currKey);
- List<GroupBucket> buckets = new ArrayList<GroupBucket>();
+ List<GroupBucket> buckets = new ArrayList<>();
buckets.addAll(existingGroup.buckets().buckets());
PortNumber[] newNeighborPorts = {PortNumber.portNumber(41),
PortNumber.portNumber(42)};
- List<PortNumber> newOutPorts = new ArrayList<PortNumber>();
+ List<PortNumber> newOutPorts = new ArrayList<>();
newOutPorts.addAll(Collections.singletonList(newNeighborPorts[0]));
- List<GroupBucket> toAddBuckets = new ArrayList<GroupBucket>();
+ List<GroupBucket> toAddBuckets = new ArrayList<>();
for (PortNumber portNumber: newOutPorts) {
TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder();
tBuilder.setOutput(portNumber)
@@ -340,10 +340,10 @@ public class SimpleGroupStoreTest {
// Testing updateGroupDescription for REMOVE operation from northbound
private void testRemoveBuckets(GroupKey currKey, GroupKey removeKey) {
Group existingGroup = simpleGroupStore.getGroup(D1, currKey);
- List<GroupBucket> buckets = new ArrayList<GroupBucket>();
+ List<GroupBucket> buckets = new ArrayList<>();
buckets.addAll(existingGroup.buckets().buckets());
- List<GroupBucket> toRemoveBuckets = new ArrayList<GroupBucket>();
+ List<GroupBucket> toRemoveBuckets = new ArrayList<>();
// There should be 4 buckets in the current group
toRemoveBuckets.add(buckets.remove(0));
@@ -405,11 +405,11 @@ public class SimpleGroupStoreTest {
GroupKey key = new DefaultGroupKey("group1".getBytes());
PortNumber[] ports = {PortNumber.portNumber(31),
PortNumber.portNumber(32)};
- List<PortNumber> outPorts = new ArrayList<PortNumber>();
+ List<PortNumber> outPorts = new ArrayList<>();
outPorts.add(ports[0]);
outPorts.add(ports[1]);
- List<GroupBucket> buckets = new ArrayList<GroupBucket>();
+ List<GroupBucket> buckets = new ArrayList<>();
for (PortNumber portNumber: outPorts) {
TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder();
tBuilder.setOutput(portNumber)
diff --git a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleHostStore.java b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleHostStore.java
index f5604f68..264d0493 100644
--- a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleHostStore.java
+++ b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleHostStore.java
@@ -15,23 +15,16 @@
*/
package org.onosproject.store.trivial;
-import static org.onosproject.net.DefaultAnnotations.merge;
-import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_MOVED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_REMOVED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_UPDATED;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Multimap;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Service;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
import org.onosproject.net.Annotations;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DefaultAnnotations;
@@ -44,19 +37,21 @@ import org.onosproject.net.host.HostDescription;
import org.onosproject.net.host.HostEvent;
import org.onosproject.net.host.HostStore;
import org.onosproject.net.host.HostStoreDelegate;
-import org.onosproject.net.host.PortAddresses;
import org.onosproject.net.provider.ProviderId;
import org.onosproject.store.AbstractStore;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.VlanId;
import org.slf4j.Logger;
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Multimap;
-import com.google.common.collect.Multimaps;
-import com.google.common.collect.SetMultimap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static org.onosproject.net.DefaultAnnotations.merge;
+import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
+import static org.onosproject.net.host.HostEvent.Type.HOST_MOVED;
+import static org.onosproject.net.host.HostEvent.Type.HOST_REMOVED;
+import static org.onosproject.net.host.HostEvent.Type.HOST_UPDATED;
+import static org.slf4j.LoggerFactory.getLogger;
// TODO: multi-provider, annotation not supported.
/**
@@ -77,10 +72,6 @@ public class SimpleHostStore
// Hosts tracked by their location
private final Multimap<ConnectPoint, Host> locations = HashMultimap.create();
- private final SetMultimap<ConnectPoint, PortAddresses> portAddresses =
- Multimaps.synchronizedSetMultimap(
- HashMultimap.<ConnectPoint, PortAddresses>create());
-
@Activate
public void activate() {
log.info("Started");
@@ -93,12 +84,14 @@ public class SimpleHostStore
@Override
public HostEvent createOrUpdateHost(ProviderId providerId, HostId hostId,
- HostDescription hostDescription) {
+ HostDescription hostDescription,
+ boolean replaceIps) {
+ //TODO We need a way to detect conflicting changes and abort update.
StoredHost host = hosts.get(hostId);
if (host == null) {
return createHost(providerId, hostId, hostDescription);
}
- return updateHost(providerId, host, hostDescription);
+ return updateHost(providerId, host, hostDescription, replaceIps);
}
// creates a new host and sends HOST_ADDED
@@ -119,7 +112,7 @@ public class SimpleHostStore
// checks for type of update to host, sends appropriate event
private HostEvent updateHost(ProviderId providerId, StoredHost host,
- HostDescription descr) {
+ HostDescription descr, boolean replaceIps) {
HostEvent event;
if (!host.location().equals(descr.location())) {
host.setLocation(descr.location());
@@ -131,8 +124,14 @@ public class SimpleHostStore
return null;
}
- Set<IpAddress> addresses = new HashSet<>(host.ipAddresses());
- addresses.addAll(descr.ipAddress());
+ final Set<IpAddress> addresses;
+ if (replaceIps) {
+ addresses = ImmutableSet.copyOf(descr.ipAddress());
+ } else {
+ addresses = new HashSet<>(host.ipAddresses());
+ addresses.addAll(descr.ipAddress());
+ }
+
Annotations annotations = merge((DefaultAnnotations) host.annotations(),
descr.annotations());
StoredHost updated = new StoredHost(providerId, host.id(),
@@ -224,41 +223,6 @@ public class SimpleHostStore
return hostset;
}
- @Override
- public void updateAddressBindings(PortAddresses addresses) {
- portAddresses.put(addresses.connectPoint(), addresses);
- }
-
- @Override
- public void removeAddressBindings(PortAddresses addresses) {
- portAddresses.remove(addresses.connectPoint(), addresses);
- }
-
- @Override
- public void clearAddressBindings(ConnectPoint connectPoint) {
- portAddresses.removeAll(connectPoint);
- }
-
- @Override
- public Set<PortAddresses> getAddressBindings() {
- synchronized (portAddresses) {
- return ImmutableSet.copyOf(portAddresses.values());
- }
- }
-
- @Override
- public Set<PortAddresses> getAddressBindingsForPort(ConnectPoint connectPoint) {
- synchronized (portAddresses) {
- Set<PortAddresses> addresses = portAddresses.get(connectPoint);
-
- if (addresses == null) {
- return Collections.emptySet();
- } else {
- return ImmutableSet.copyOf(addresses);
- }
- }
- }
-
// Auxiliary extension to allow location to mutate.
private static final class StoredHost extends DefaultHost {
private HostLocation location;
diff --git a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleLinkStore.java b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleLinkStore.java
index d0be2b1f..92b882a6 100644
--- a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleLinkStore.java
+++ b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleLinkStore.java
@@ -44,7 +44,6 @@ import org.onosproject.net.provider.ProviderId;
import org.onosproject.store.AbstractStore;
import org.slf4j.Logger;
-import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -280,7 +279,7 @@ public class SimpleLinkStore
*/
private static <K, V> SetMultimap<K, V> createSynchronizedHashMultiMap() {
return synchronizedSetMultimap(
- Multimaps.newSetMultimap(new ConcurrentHashMap<K, Collection<V>>(),
+ Multimaps.newSetMultimap(new ConcurrentHashMap<>(),
() -> Sets.newConcurrentHashSet()));
}
diff --git a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleLinkStoreTest.java b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleLinkStoreTest.java
index 2d2b2759..40649aa5 100644
--- a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleLinkStoreTest.java
+++ b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleLinkStoreTest.java
@@ -498,31 +498,22 @@ public class SimpleLinkStoreTest {
final LinkKey linkId1 = LinkKey.linkKey(d1P1, d2P2);
final CountDownLatch addLatch = new CountDownLatch(1);
- LinkStoreDelegate checkAdd = new LinkStoreDelegate() {
- @Override
- public void notify(LinkEvent event) {
- assertEquals(LINK_ADDED, event.type());
- assertLink(linkId1, INDIRECT, event.subject());
- addLatch.countDown();
- }
+ LinkStoreDelegate checkAdd = event -> {
+ assertEquals(LINK_ADDED, event.type());
+ assertLink(linkId1, INDIRECT, event.subject());
+ addLatch.countDown();
};
final CountDownLatch updateLatch = new CountDownLatch(1);
- LinkStoreDelegate checkUpdate = new LinkStoreDelegate() {
- @Override
- public void notify(LinkEvent event) {
- assertEquals(LINK_UPDATED, event.type());
- assertLink(linkId1, DIRECT, event.subject());
- updateLatch.countDown();
- }
+ LinkStoreDelegate checkUpdate = event -> {
+ assertEquals(LINK_UPDATED, event.type());
+ assertLink(linkId1, DIRECT, event.subject());
+ updateLatch.countDown();
};
final CountDownLatch removeLatch = new CountDownLatch(1);
- LinkStoreDelegate checkRemove = new LinkStoreDelegate() {
- @Override
- public void notify(LinkEvent event) {
- assertEquals(LINK_REMOVED, event.type());
- assertLink(linkId1, DIRECT, event.subject());
- removeLatch.countDown();
- }
+ LinkStoreDelegate checkRemove = event -> {
+ assertEquals(LINK_REMOVED, event.type());
+ assertLink(linkId1, DIRECT, event.subject());
+ removeLatch.countDown();
};
linkStore.setDelegate(checkAdd);
diff --git a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleMastershipStore.java b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleMastershipStore.java
index ef92ded2..61db2e66 100644
--- a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleMastershipStore.java
+++ b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimpleMastershipStore.java
@@ -375,14 +375,10 @@ public class SimpleMastershipStore
.filter(entry -> entry.getValue().contains(nodeId))
.forEach(entry -> toRelinquish.add(entry.getKey()));
- toRelinquish.forEach(deviceId -> {
- eventFutures.add(relinquishRole(nodeId, deviceId));
- });
+ toRelinquish.forEach(deviceId -> eventFutures.add(relinquishRole(nodeId, deviceId)));
eventFutures.forEach(future -> {
- future.whenComplete((event, error) -> {
- notifyDelegate(event);
- });
+ future.whenComplete((event, error) -> notifyDelegate(event));
});
}
}
diff --git a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimplePacketStore.java b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimplePacketStore.java
index 4345abaf..f8359262 100644
--- a/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimplePacketStore.java
+++ b/framework/src/onos/core/common/src/test/java/org/onosproject/store/trivial/SimplePacketStore.java
@@ -15,6 +15,7 @@
*/
package org.onosproject.store.trivial;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
@@ -26,8 +27,7 @@ import org.onosproject.net.packet.PacketStore;
import org.onosproject.net.packet.PacketStoreDelegate;
import org.onosproject.store.AbstractStore;
-
-import java.util.Collections;
+import java.util.List;
import java.util.Set;
/**
@@ -57,8 +57,8 @@ public class SimplePacketStore
}
@Override
- public Set<PacketRequest> existingRequests() {
- return Collections.unmodifiableSet(requests);
+ public List<PacketRequest> existingRequests() {
+ return ImmutableList.copyOf(requests);
}
}
diff --git a/framework/src/onos/core/net/pom.xml b/framework/src/onos/core/net/pom.xml
index 4ba04c50..9ea00070 100644
--- a/framework/src/onos/core/net/pom.xml
+++ b/framework/src/onos/core/net/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-core</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/core/impl/CoreManager.java b/framework/src/onos/core/net/src/main/java/org/onosproject/core/impl/CoreManager.java
index 07612292..8a441f61 100644
--- a/framework/src/onos/core/net/src/main/java/org/onosproject/core/impl/CoreManager.java
+++ b/framework/src/onos/core/net/src/main/java/org/onosproject/core/impl/CoreManager.java
@@ -59,7 +59,7 @@ public class CoreManager implements CoreService {
private final Logger log = LoggerFactory.getLogger(getClass());
private static final File VERSION_FILE = new File("../VERSION");
- private static Version version = Version.version("1.3.0-SNAPSHOT");
+ private static Version version = Version.version("1.4.0-SNAPSHOT");
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected ApplicationIdStore applicationIdStore;
diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/net/edgeservice/impl/package-info.java b/framework/src/onos/core/net/src/main/java/org/onosproject/net/edgeservice/impl/package-info.java
index fd867326..fa5f2480 100644
--- a/framework/src/onos/core/net/src/main/java/org/onosproject/net/edgeservice/impl/package-info.java
+++ b/framework/src/onos/core/net/src/main/java/org/onosproject/net/edgeservice/impl/package-info.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
/**
* Core subsystem for interacting with network edges.
*/
diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java b/framework/src/onos/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
index 99263381..43f346b7 100644
--- a/framework/src/onos/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
+++ b/framework/src/onos/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
@@ -25,6 +25,7 @@ import org.onlab.packet.IpAddress;
import org.onlab.packet.MacAddress;
import org.onlab.packet.VlanId;
import org.onosproject.incubator.net.intf.InterfaceService;
+import org.onosproject.net.edge.EdgePortService;
import org.onosproject.net.provider.AbstractListenerProviderRegistry;
import org.onosproject.net.config.NetworkConfigEvent;
import org.onosproject.net.config.NetworkConfigListener;
@@ -45,7 +46,6 @@ import org.onosproject.net.host.HostProviderService;
import org.onosproject.net.host.HostService;
import org.onosproject.net.host.HostStore;
import org.onosproject.net.host.HostStoreDelegate;
-import org.onosproject.net.host.PortAddresses;
import org.onosproject.net.packet.PacketService;
import org.onosproject.net.provider.AbstractProviderService;
import org.slf4j.Logger;
@@ -90,6 +90,9 @@ public class HostManager
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected InterfaceService interfaceService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected EdgePortService edgePortService;
+
private HostMonitor monitor;
@Activate
@@ -97,7 +100,7 @@ public class HostManager
store.setDelegate(delegate);
eventDispatcher.addSink(HostEvent.class, listenerRegistry);
networkConfigService.addListener(networkConfigListener);
- monitor = new HostMonitor(packetService, this, interfaceService);
+ monitor = new HostMonitor(packetService, this, interfaceService, edgePortService);
monitor.start();
log.info("Started");
}
@@ -195,33 +198,6 @@ public class HostManager
}
}
- @Override
- public void bindAddressesToPort(PortAddresses addresses) {
- store.updateAddressBindings(addresses);
- }
-
- @Override
- public void unbindAddressesFromPort(PortAddresses portAddresses) {
- store.removeAddressBindings(portAddresses);
- }
-
- @Override
- public void clearAddresses(ConnectPoint connectPoint) {
- store.clearAddressBindings(connectPoint);
- }
-
- @Override
- public Set<PortAddresses> getAddressBindings() {
- checkPermission(HOST_READ);
- return store.getAddressBindings();
- }
-
- @Override
- public Set<PortAddresses> getAddressBindingsForPort(ConnectPoint connectPoint) {
- checkPermission(HOST_READ);
- return store.getAddressBindingsForPort(connectPoint);
- }
-
// Personalized host provider service issued to the supplied provider.
private class InternalHostProviderService
extends AbstractProviderService<HostProvider>
@@ -231,12 +207,12 @@ public class HostManager
}
@Override
- public void hostDetected(HostId hostId, HostDescription hostDescription) {
+ public void hostDetected(HostId hostId, HostDescription hostDescription, boolean replaceIps) {
checkNotNull(hostId, HOST_ID_NULL);
checkValidity();
hostDescription = validateHost(hostDescription, hostId);
HostEvent event = store.createOrUpdateHost(provider().id(), hostId,
- hostDescription);
+ hostDescription, replaceIps);
if (event != null) {
post(event);
}
diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java b/framework/src/onos/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java
index fe252368..44f8cbf0 100644
--- a/framework/src/onos/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java
+++ b/framework/src/onos/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java
@@ -31,21 +31,20 @@ import org.onosproject.incubator.net.intf.Interface;
import org.onosproject.incubator.net.intf.InterfaceService;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.Host;
+import org.onosproject.net.edge.EdgePortService;
import org.onosproject.net.flow.DefaultTrafficTreatment;
import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.net.flow.instructions.Instructions;
import org.onosproject.net.host.HostProvider;
import org.onosproject.net.host.InterfaceIpAddress;
import org.onosproject.net.packet.DefaultOutboundPacket;
import org.onosproject.net.packet.OutboundPacket;
import org.onosproject.net.packet.PacketService;
import org.onosproject.net.provider.ProviderId;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.nio.ByteBuffer;
-import java.util.ArrayList;
import java.util.Collections;
-import java.util.List;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@@ -60,9 +59,13 @@ import java.util.concurrent.TimeUnit;
* </p>
*/
public class HostMonitor implements TimerTask {
+
+ private Logger log = LoggerFactory.getLogger(getClass());
+
private PacketService packetService;
private HostManager hostManager;
private InterfaceService interfaceService;
+ private EdgePortService edgePortService;
private final Set<IpAddress> monitoredAddresses;
@@ -83,11 +86,13 @@ public class HostMonitor implements TimerTask {
* @param interfaceService interface service for interface information
*/
public HostMonitor(PacketService packetService, HostManager hostManager,
- InterfaceService interfaceService) {
+ InterfaceService interfaceService,
+ EdgePortService edgePortService) {
this.packetService = packetService;
this.hostManager = hostManager;
this.interfaceService = interfaceService;
+ this.edgePortService = edgePortService;
monitoredAddresses = Collections.newSetFromMap(new ConcurrentHashMap<>());
hostProviders = new ConcurrentHashMap<>();
@@ -149,7 +154,7 @@ public class HostMonitor implements TimerTask {
Set<Host> hosts = hostManager.getHostsByIp(ip);
if (hosts.isEmpty()) {
- sendArpNdpRequest(ip);
+ sendRequest(ip);
} else {
for (Host host : hosts) {
HostProvider provider = hostProviders.get(host.providerId());
@@ -166,45 +171,44 @@ public class HostMonitor implements TimerTask {
}
/**
- * Sends an ARP or Neighbor Discovery Protocol request for the given IP
- * address.
+ * Sends an ARP or NDP request for the given IP address.
*
* @param targetIp IP address to send the request for
*/
- private void sendArpNdpRequest(IpAddress targetIp) {
+ private void sendRequest(IpAddress targetIp) {
Interface intf = interfaceService.getMatchingInterface(targetIp);
if (intf == null) {
return;
}
+ if (!edgePortService.isEdgePoint(intf.connectPoint())) {
+ log.warn("Attempt to send probe out non-edge port: {}", intf);
+ return;
+ }
+
for (InterfaceIpAddress ia : intf.ipAddresses()) {
if (ia.subnetAddress().contains(targetIp)) {
- sendArpNdpProbe(intf.connectPoint(), targetIp, ia.ipAddress(),
+ sendProbe(intf.connectPoint(), targetIp, ia.ipAddress(),
intf.mac(), intf.vlan());
}
}
}
- private void sendArpNdpProbe(ConnectPoint connectPoint,
- IpAddress targetIp,
- IpAddress sourceIp, MacAddress sourceMac,
- VlanId vlan) {
+ private void sendProbe(ConnectPoint connectPoint,
+ IpAddress targetIp,
+ IpAddress sourceIp, MacAddress sourceMac,
+ VlanId vlan) {
Ethernet probePacket = null;
if (targetIp.isIp4()) {
// IPv4: Use ARP
- probePacket = buildArpRequest(targetIp, sourceIp, sourceMac,
- vlan);
+ probePacket = buildArpRequest(targetIp, sourceIp, sourceMac, vlan);
} else {
// IPv6: Use Neighbor Discovery
- probePacket = buildNdpRequest(targetIp, sourceIp, sourceMac,
- vlan);
+ probePacket = buildNdpRequest(targetIp, sourceIp, sourceMac, vlan);
}
- List<Instruction> instructions = new ArrayList<>();
- instructions.add(Instructions.createOutput(connectPoint.port()));
-
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setOutput(connectPoint.port())
.build();
@@ -273,7 +277,7 @@ public class HostMonitor implements TimerTask {
icmp6.setIcmpType(ICMP6.NEIGHBOR_SOLICITATION);
icmp6.setIcmpCode((byte) 0);
- // Create the Neighbor Solication packet
+ // Create the Neighbor Solicitation packet
NeighborSolicitation ns = new NeighborSolicitation();
ns.setTargetAddress(targetIp.toOctets());
ns.addOption(NeighborDiscoveryOptions.TYPE_SOURCE_LL_ADDRESS,
diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/MplsIntentCompiler.java b/framework/src/onos/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/MplsIntentCompiler.java
index 609f9a34..52621e2f 100644
--- a/framework/src/onos/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/MplsIntentCompiler.java
+++ b/framework/src/onos/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/MplsIntentCompiler.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.net.intent.impl.compiler;
import static java.util.Arrays.asList;
diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalConnectivityIntentCompiler.java b/framework/src/onos/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalConnectivityIntentCompiler.java
index c60325a7..05a20f96 100644
--- a/framework/src/onos/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalConnectivityIntentCompiler.java
+++ b/framework/src/onos/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalConnectivityIntentCompiler.java
@@ -51,7 +51,6 @@ import org.onosproject.net.resource.link.LinkResourceRequest;
import org.onosproject.net.resource.link.LinkResourceService;
import org.onosproject.net.topology.LinkWeight;
import org.onosproject.net.topology.Topology;
-import org.onosproject.net.topology.TopologyEdge;
import org.onosproject.net.topology.TopologyService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -265,34 +264,31 @@ public class OpticalConnectivityIntentCompiler implements IntentCompiler<Optical
private Set<Path> getOpticalPaths(OpticalConnectivityIntent intent) {
// Route in WDM topology
Topology topology = topologyService.currentTopology();
- LinkWeight weight = new LinkWeight() {
- @Override
- public double weight(TopologyEdge edge) {
- // Disregard inactive or non-optical links
- if (edge.link().state() == Link.State.INACTIVE) {
- return -1;
- }
- if (edge.link().type() != Link.Type.OPTICAL) {
- return -1;
- }
- // Adhere to static port mappings
- DeviceId srcDeviceId = edge.link().src().deviceId();
- if (srcDeviceId.equals(intent.getSrc().deviceId())) {
- ConnectPoint srcStaticPort = staticPort(intent.getSrc());
- if (srcStaticPort != null) {
- return srcStaticPort.equals(edge.link().src()) ? 1 : -1;
- }
+ LinkWeight weight = edge -> {
+ // Disregard inactive or non-optical links
+ if (edge.link().state() == Link.State.INACTIVE) {
+ return -1;
+ }
+ if (edge.link().type() != Link.Type.OPTICAL) {
+ return -1;
+ }
+ // Adhere to static port mappings
+ DeviceId srcDeviceId = edge.link().src().deviceId();
+ if (srcDeviceId.equals(intent.getSrc().deviceId())) {
+ ConnectPoint srcStaticPort = staticPort(intent.getSrc());
+ if (srcStaticPort != null) {
+ return srcStaticPort.equals(edge.link().src()) ? 1 : -1;
}
- DeviceId dstDeviceId = edge.link().dst().deviceId();
- if (dstDeviceId.equals(intent.getDst().deviceId())) {
- ConnectPoint dstStaticPort = staticPort(intent.getDst());
- if (dstStaticPort != null) {
- return dstStaticPort.equals(edge.link().dst()) ? 1 : -1;
- }
+ }
+ DeviceId dstDeviceId = edge.link().dst().deviceId();
+ if (dstDeviceId.equals(intent.getDst().deviceId())) {
+ ConnectPoint dstStaticPort = staticPort(intent.getDst());
+ if (dstStaticPort != null) {
+ return dstStaticPort.equals(edge.link().dst()) ? 1 : -1;
}
-
- return 1;
}
+
+ return 1;
};
ConnectPoint start = intent.getSrc();
diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/net/link/impl/BasicLinkOperator.java b/framework/src/onos/core/net/src/main/java/org/onosproject/net/link/impl/BasicLinkOperator.java
index a6b08f62..801092f4 100644
--- a/framework/src/onos/core/net/src/main/java/org/onosproject/net/link/impl/BasicLinkOperator.java
+++ b/framework/src/onos/core/net/src/main/java/org/onosproject/net/link/impl/BasicLinkOperator.java
@@ -16,12 +16,14 @@
package org.onosproject.net.link.impl;
import static org.slf4j.LoggerFactory.getLogger;
+import static com.google.common.base.Preconditions.checkNotNull;
import java.time.Duration;
import org.onosproject.net.AnnotationKeys;
import org.onosproject.net.config.ConfigOperator;
import org.onosproject.net.config.basics.BasicLinkConfig;
+import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DefaultAnnotations;
import org.onosproject.net.Link;
import org.onosproject.net.SparseAnnotations;
@@ -81,6 +83,46 @@ public final class BasicLinkOperator implements ConfigOperator {
if (cfg.bandwidth() != DEF_BANDWIDTH) {
b.set(AnnotationKeys.BANDWIDTH, String.valueOf(cfg.bandwidth()));
}
+ if (cfg.isDurable() != null) {
+ b.set(AnnotationKeys.DURABLE, String.valueOf(cfg.isDurable()));
+ }
return DefaultAnnotations.union(an, b.build());
}
+
+ /**
+ * Generates a link description from a link description entity. The endpoints
+ * must be specified to indicate directionality.
+ *
+ * @param src the source ConnectPoint
+ * @param dst the destination ConnectPoint
+ * @param link the link config entity
+ * @return a linkDescription based on the config
+ */
+ public static LinkDescription descriptionOf(
+ ConnectPoint src, ConnectPoint dst, Link link) {
+ checkNotNull(src, "Must supply a source endpoint");
+ checkNotNull(dst, "Must supply a destination endpoint");
+ checkNotNull(link, "Must supply a link");
+ return new DefaultLinkDescription(
+ src, dst, link.type(), (SparseAnnotations) link.annotations());
+ }
+
+ /**
+ * Generates a link description from a link config entity. This is for
+ * links that cannot be discovered and has to be injected. The endpoints
+ * must be specified to indicate directionality.
+ *
+ * @param src the source ConnectPoint
+ * @param dst the destination ConnectPoint
+ * @param link the link config entity
+ * @return a linkDescription based on the config
+ */
+ public static LinkDescription descriptionOf(
+ ConnectPoint src, ConnectPoint dst, BasicLinkConfig link) {
+ checkNotNull(src, "Must supply a source endpoint");
+ checkNotNull(dst, "Must supply a destination endpoint");
+ checkNotNull(link, "Must supply a link config");
+ return new DefaultLinkDescription(
+ src, dst, link.type(), combine(link, DefaultAnnotations.EMPTY));
+ }
}
diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/net/link/impl/LinkManager.java b/framework/src/onos/core/net/src/main/java/org/onosproject/net/link/impl/LinkManager.java
index 157288a4..d6f72fd9 100644
--- a/framework/src/onos/core/net/src/main/java/org/onosproject/net/link/impl/LinkManager.java
+++ b/framework/src/onos/core/net/src/main/java/org/onosproject/net/link/impl/LinkManager.java
@@ -15,9 +15,9 @@
*/
package org.onosproject.net.link.impl;
-import com.google.common.base.Predicate;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.Sets;
+
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -25,6 +25,7 @@ import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
import org.onosproject.net.provider.AbstractListenerProviderRegistry;
+import org.onosproject.net.provider.ProviderId;
import org.onosproject.net.config.NetworkConfigEvent;
import org.onosproject.net.config.NetworkConfigListener;
import org.onosproject.net.config.NetworkConfigService;
@@ -54,7 +55,6 @@ import org.slf4j.Logger;
import java.util.Set;
import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
import static org.onosproject.net.LinkKey.linkKey;
import static org.onosproject.security.AppGuard.checkPermission;
import static org.slf4j.LoggerFactory.getLogger;
@@ -125,13 +125,7 @@ public class LinkManager
public Iterable<Link> getActiveLinks() {
checkPermission(LINK_READ);
return FluentIterable.from(getLinks())
- .filter(new Predicate<Link>() {
-
- @Override
- public boolean apply(Link input) {
- return input.state() == State.ACTIVE;
- }
- });
+ .filter(input -> input.state() == State.ACTIVE);
}
@Override
@@ -207,6 +201,10 @@ public class LinkManager
post(store.removeLink(src, dst));
}
+ private boolean isAllowed(BasicLinkConfig cfg) {
+ return (cfg == null || cfg.isAllowed());
+ }
+
// Auxiliary interceptor for device remove events to prune links that
// are associated with the removed device or its port.
private class InternalDeviceListener implements DeviceListener {
@@ -240,11 +238,12 @@ public class LinkManager
checkNotNull(linkDescription, LINK_DESC_NULL);
checkValidity();
linkDescription = validateLink(linkDescription);
- LinkEvent event = store.createOrUpdateLink(provider().id(),
- linkDescription);
- if (event != null) {
- log.info("Link {} detected", linkDescription);
- post(event);
+ if (linkDescription != null) {
+ LinkEvent event = store.createOrUpdateLink(provider().id(), linkDescription);
+ if (event != null) {
+ log.info("Link {} detected", linkDescription);
+ post(event);
+ }
}
}
@@ -258,11 +257,12 @@ public class LinkManager
BasicLinkConfig cfgTwo = networkConfigService.getConfig(linkKey(linkDescription.dst(),
linkDescription.src()),
BasicLinkConfig.class);
-
- checkState(cfg == null || cfg.isAllowed(), "Link " + linkDescription.toString() + " is not allowed");
- checkState(cfgTwo == null || cfgTwo.isAllowed(), "Link " + linkDescription.toString() + " is not allowed");
-
- return BasicLinkOperator.combine(cfg, linkDescription);
+ if (isAllowed(cfg) && isAllowed(cfgTwo)) {
+ return BasicLinkOperator.combine(cfg, linkDescription);
+ } else {
+ log.trace("Link " + linkDescription.toString() + " is not allowed");
+ return null;
+ }
}
@Override
@@ -324,20 +324,41 @@ public class LinkManager
// listens for NetworkConfigEvents of type BasicLinkConfig and removes
// links that the config does not allow
private class InternalNetworkConfigListener implements NetworkConfigListener {
+
+ @Override
+ public boolean isRelevant(NetworkConfigEvent event) {
+ return event.configClass().equals(BasicLinkConfig.class)
+ && (event.type() == NetworkConfigEvent.Type.CONFIG_ADDED
+ || event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED);
+ }
+
@Override
public void event(NetworkConfigEvent event) {
- if ((event.type() == NetworkConfigEvent.Type.CONFIG_ADDED ||
- event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED) &&
- event.configClass().equals(BasicLinkConfig.class)) {
- log.info("Detected Link network config event {}", event.type());
- LinkKey lk = (LinkKey) event.subject();
- BasicLinkConfig cfg = networkConfigService.getConfig(lk, BasicLinkConfig.class);
- if (cfg != null && !cfg.isAllowed()) {
- log.info("Kicking out links between {} and {}", lk.src(), lk.dst());
- removeLink(lk.src(), lk.dst());
- removeLink(lk.dst(), lk.src());
- }
+ LinkKey lk = (LinkKey) event.subject();
+ BasicLinkConfig cfg = networkConfigService.getConfig(lk, BasicLinkConfig.class);
+
+ if (!isAllowed(cfg)) {
+ log.info("Kicking out links between {} and {}", lk.src(), lk.dst());
+ removeLink(lk.src(), lk.dst());
+ removeLink(lk.dst(), lk.src());
+ return;
}
+ Link link = getLink(lk.src(), lk.dst());
+ LinkDescription fldesc;
+ LinkDescription rldesc;
+ if (link == null) {
+ fldesc = BasicLinkOperator.descriptionOf(lk.src(), lk.dst(), cfg);
+ rldesc = BasicLinkOperator.descriptionOf(lk.dst(), lk.src(), cfg);
+ } else {
+ fldesc = BasicLinkOperator.combine(cfg,
+ BasicLinkOperator.descriptionOf(lk.src(), lk.dst(), link));
+ rldesc = BasicLinkOperator.combine(cfg,
+ BasicLinkOperator.descriptionOf(lk.dst(), lk.src(), link));
+ }
+ // XXX think of sane way to fetch the LinkProvider
+ store.createOrUpdateLink(ProviderId.NONE, fldesc);
+ store.createOrUpdateLink(ProviderId.NONE, rldesc);
}
+
}
}
diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java b/framework/src/onos/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java
index 75239fdd..a0bc693c 100644
--- a/framework/src/onos/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java
+++ b/framework/src/onos/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java
@@ -15,6 +15,7 @@
*/
package org.onosproject.net.packet.impl;
+import com.google.common.collect.ImmutableMap;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -53,6 +54,7 @@ import org.onosproject.net.provider.AbstractProviderRegistry;
import org.onosproject.net.provider.AbstractProviderService;
import org.slf4j.Logger;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
@@ -61,8 +63,8 @@ import java.util.concurrent.Executors;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.onlab.util.Tools.groupedThreads;
import static org.onosproject.security.AppGuard.checkPermission;
-import static org.slf4j.LoggerFactory.getLogger;
import static org.onosproject.security.AppPermission.Type.*;
+import static org.slf4j.LoggerFactory.getLogger;
/**
* Provides a basic implementation of the packet SB &amp; NB APIs.
@@ -138,6 +140,11 @@ public class PacketManager
}
@Override
+ public Map<Integer, PacketProcessor> getProcessors() {
+ return ImmutableMap.copyOf(processors);
+ }
+
+ @Override
public void requestPackets(TrafficSelector selector, PacketPriority priority,
ApplicationId appId) {
checkPermission(PACKET_READ);
@@ -163,6 +170,11 @@ public class PacketManager
}
}
+ @Override
+ public List<PacketRequest> getRequests() {
+ return store.existingRequests();
+ }
+
/**
* Pushes a packet request flow rule to all devices.
*
diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/net/proxyarp/impl/ProxyArpManager.java b/framework/src/onos/core/net/src/main/java/org/onosproject/net/proxyarp/impl/ProxyArpManager.java
index 398260ff..25a2640d 100644
--- a/framework/src/onos/core/net/src/main/java/org/onosproject/net/proxyarp/impl/ProxyArpManager.java
+++ b/framework/src/onos/core/net/src/main/java/org/onosproject/net/proxyarp/impl/ProxyArpManager.java
@@ -69,11 +69,9 @@ public class ProxyArpManager implements ProxyArpService {
private final Logger log = getLogger(getClass());
- private static final String MAC_ADDR_NULL = "Mac address cannot be null.";
+ private static final String MAC_ADDR_NULL = "MAC address cannot be null.";
private static final String REQUEST_NULL = "ARP or NDP request cannot be null.";
- private static final String REQUEST_NOT_ARP = "Ethernet frame does not contain ARP request.";
- private static final String NOT_ARP_REQUEST = "ARP is not a request.";
- private static final String NOT_ARP_REPLY = "ARP is not a reply.";
+ private static final String MSG_NOT_REQUEST = "Message is not an ARP or NDP request";
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected EdgePortService edgeService;
@@ -96,6 +94,14 @@ public class ProxyArpManager implements ProxyArpService {
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected InterfaceService interfaceService;
+ private enum Protocol {
+ ARP, NDP
+ }
+
+ private enum MessageType {
+ REQUEST, REPLY
+ }
+
@Activate
public void activate() {
store.setDelegate(this::sendTo);
@@ -123,46 +129,48 @@ public class ProxyArpManager implements ProxyArpService {
checkNotNull(eth, REQUEST_NULL);
- if (eth.getEtherType() == Ethernet.TYPE_ARP) {
- replyArp(eth, inPort);
- } else if (eth.getEtherType() == Ethernet.TYPE_IPV6) {
- replyNdp(eth, inPort);
+ MessageContext context = createContext(eth, inPort);
+ if (context != null) {
+ replyInternal(context);
}
}
- private void replyArp(Ethernet eth, ConnectPoint inPort) {
- ARP arp = (ARP) eth.getPayload();
- checkArgument(arp.getOpCode() == ARP.OP_REQUEST, NOT_ARP_REQUEST);
- checkNotNull(inPort);
- Ip4Address targetAddress = Ip4Address.valueOf(arp.getTargetProtocolAddress());
-
- VlanId vlan = vlanId(eth.getVlanID());
+ /**
+ * Handles a request message.
+ *
+ * If the MAC address of the target is known, we can reply directly to the
+ * requestor. Otherwise, we forward the request out other ports in an
+ * attempt to find the correct host.
+ *
+ * @param context request message context to process
+ */
+ private void replyInternal(MessageContext context) {
+ checkNotNull(context);
+ checkArgument(context.type() == MessageType.REQUEST, MSG_NOT_REQUEST);
- if (hasIpAddress(inPort)) {
+ if (hasIpAddress(context.inPort())) {
// If the request came from outside the network, only reply if it was
// for one of our external addresses.
- interfaceService.getInterfacesByPort(inPort)
+ interfaceService.getInterfacesByPort(context.inPort())
.stream()
.filter(intf -> intf.ipAddresses()
.stream()
- .anyMatch(ia -> ia.ipAddress().equals(targetAddress)))
- .forEach(intf -> buildAndSendArp(targetAddress, intf.mac(), eth, inPort));
+ .anyMatch(ia -> ia.ipAddress().equals(context.target())))
+ .forEach(intf -> buildAndSendReply(context, intf.mac()));
// Stop here and don't proxy ARPs if the port has an IP address
return;
}
// See if we have the target host in the host store
-
- Set<Host> hosts = hostService.getHostsByIp(targetAddress);
+ Set<Host> hosts = hostService.getHostsByIp(context.target());
Host dst = null;
- Host src = hostService.getHost(hostId(eth.getSourceMAC(),
- vlanId(eth.getVlanID())));
+ Host src = hostService.getHost(hostId(context.srcMac(), context.vlan()));
for (Host host : hosts) {
- if (host.vlan().equals(vlan)) {
+ if (host.vlan().equals(context.vlan())) {
dst = host;
break;
}
@@ -170,22 +178,19 @@ public class ProxyArpManager implements ProxyArpService {
if (src != null && dst != null) {
// We know the target host so we can respond
- buildAndSendArp(targetAddress, dst.mac(), eth, inPort);
+ buildAndSendReply(context, dst.mac());
return;
}
// If the source address matches one of our external addresses
// it could be a request from an internal host to an external
// address. Forward it over to the correct port.
- Ip4Address source =
- Ip4Address.valueOf(arp.getSenderProtocolAddress());
-
boolean matched = false;
- Set<Interface> interfaces = interfaceService.getInterfacesByIp(source);
+ Set<Interface> interfaces = interfaceService.getInterfacesByIp(context.sender());
for (Interface intf : interfaces) {
- if (intf.vlan().equals(vlan)) {
+ if (intf.vlan().equals(context.vlan())) {
matched = true;
- sendTo(eth, intf.connectPoint());
+ sendTo(context.packet(), intf.connectPoint());
break;
}
}
@@ -196,89 +201,33 @@ public class ProxyArpManager implements ProxyArpService {
// The request couldn't be resolved.
// Flood the request on all ports except the incoming port.
- flood(eth, inPort);
+ flood(context.packet(), context.inPort());
}
- private void replyNdp(Ethernet eth, ConnectPoint inPort) {
- IPv6 ipv6 = (IPv6) eth.getPayload();
- ICMP6 icmpv6 = (ICMP6) ipv6.getPayload();
- NeighborSolicitation nsol = (NeighborSolicitation) icmpv6.getPayload();
- Ip6Address targetAddress = Ip6Address.valueOf(nsol.getTargetAddress());
-
- VlanId vlan = vlanId(eth.getVlanID());
-
- // If the request came from outside the network, only reply if it was
- // for one of our external addresses.
- if (hasIpAddress(inPort)) {
- interfaceService.getInterfacesByPort(inPort)
- .stream()
- .filter(intf -> intf.ipAddresses()
- .stream()
- .anyMatch(ia -> ia.ipAddress().equals(targetAddress)))
- .forEach(intf -> buildAndSendNdp(targetAddress, intf.mac(), eth, inPort));
- return;
- }
-
- // Continue with normal proxy ARP case
-
- Set<Host> hosts = hostService.getHostsByIp(targetAddress);
-
- Host dst = null;
- Host src = hostService.getHost(hostId(eth.getSourceMAC(),
- vlanId(eth.getVlanID())));
-
- for (Host host : hosts) {
- if (host.vlan().equals(vlan)) {
- dst = host;
- break;
- }
- }
-
- if (src != null && dst != null) {
- // We know the target host so we can respond
- buildAndSendNdp(targetAddress, dst.mac(), eth, inPort);
- return;
- }
-
- // If the source address matches one of our external addresses
- // it could be a request from an internal host to an external
- // address. Forward it over to the correct port.
- Ip6Address source =
- Ip6Address.valueOf(ipv6.getSourceAddress());
-
- boolean matched = false;
-
- Set<Interface> interfaces = interfaceService.getInterfacesByIp(source);
- for (Interface intf : interfaces) {
- if (intf.vlan().equals(vlan)) {
- matched = true;
- sendTo(eth, intf.connectPoint());
- break;
- }
- }
-
- if (matched) {
- return;
+ /**
+ * Builds and sends a reply message given a request context and the resolved
+ * MAC address to answer with.
+ *
+ * @param context message context of request
+ * @param targetMac MAC address to be given in the response
+ */
+ private void buildAndSendReply(MessageContext context, MacAddress targetMac) {
+ switch (context.protocol()) {
+ case ARP:
+ sendTo(ARP.buildArpReply((Ip4Address) context.target(),
+ targetMac, context.packet()), context.inPort());
+ break;
+ case NDP:
+ sendTo(buildNdpReply((Ip6Address) context.target(), targetMac,
+ context.packet()), context.inPort());
+ break;
+ default:
+ break;
}
-
- // The request couldn't be resolved.
- // Flood the request on all ports except the incoming ports.
- flood(eth, inPort);
- }
- //TODO checkpoint
-
- private void buildAndSendArp(Ip4Address srcIp, MacAddress srcMac,
- Ethernet request, ConnectPoint port) {
- sendTo(ARP.buildArpReply(srcIp, srcMac, request), port);
- }
-
- private void buildAndSendNdp(Ip6Address srcIp, MacAddress srcMac,
- Ethernet request, ConnectPoint port) {
- sendTo(buildNdpReply(srcIp, srcMac, request), port);
}
/**
- * Outputs the given packet out the given port.
+ * Outputs a packet out a specific port.
*
* @param packet the packet to send
* @param outPort the port to send it out
@@ -287,6 +236,12 @@ public class ProxyArpManager implements ProxyArpService {
sendTo(outPort, ByteBuffer.wrap(packet.serialize()));
}
+ /**
+ * Outputs a packet out a specific port.
+ *
+ * @param outPort port to send it out
+ * @param packet packet to send
+ */
private void sendTo(ConnectPoint outPort, ByteBuffer packet) {
if (!edgeService.isEdgePoint(outPort)) {
// Sanity check to make sure we don't send the packet out an
@@ -298,7 +253,7 @@ public class ProxyArpManager implements ProxyArpService {
TrafficTreatment.Builder builder = DefaultTrafficTreatment.builder();
builder.setOutput(outPort.port());
packetService.emit(new DefaultOutboundPacket(outPort.deviceId(),
- builder.build(), packet));
+ builder.build(), packet));
}
/**
@@ -323,7 +278,7 @@ public class ProxyArpManager implements ProxyArpService {
checkNotNull(eth, REQUEST_NULL);
Host h = hostService.getHost(hostId(eth.getDestinationMAC(),
- vlanId(eth.getVlanID())));
+ vlanId(eth.getVlanID())));
if (h == null) {
flood(eth, inPort);
@@ -344,42 +299,24 @@ public class ProxyArpManager implements ProxyArpService {
if (ethPkt == null) {
return false;
}
- if (ethPkt.getEtherType() == Ethernet.TYPE_ARP) {
- return handleArp(context, ethPkt);
- } else if (ethPkt.getEtherType() == Ethernet.TYPE_IPV6) {
- return handleNdp(context, ethPkt);
- }
- return false;
- }
- private boolean handleArp(PacketContext context, Ethernet ethPkt) {
- ARP arp = (ARP) ethPkt.getPayload();
+ MessageContext msgContext = createContext(ethPkt, pkt.receivedFrom());
- if (arp.getOpCode() == ARP.OP_REPLY) {
- forward(ethPkt, context.inPacket().receivedFrom());
- } else if (arp.getOpCode() == ARP.OP_REQUEST) {
- reply(ethPkt, context.inPacket().receivedFrom());
- } else {
+ if (msgContext == null) {
return false;
}
- context.block();
- return true;
- }
- private boolean handleNdp(PacketContext context, Ethernet ethPkt) {
- IPv6 ipv6 = (IPv6) ethPkt.getPayload();
-
- if (ipv6.getNextHeader() != IPv6.PROTOCOL_ICMP6) {
- return false;
- }
- ICMP6 icmpv6 = (ICMP6) ipv6.getPayload();
- if (icmpv6.getIcmpType() == ICMP6.NEIGHBOR_ADVERTISEMENT) {
- forward(ethPkt, context.inPacket().receivedFrom());
- } else if (icmpv6.getIcmpType() == ICMP6.NEIGHBOR_SOLICITATION) {
- reply(ethPkt, context.inPacket().receivedFrom());
- } else {
+ switch (msgContext.type()) {
+ case REPLY:
+ forward(msgContext.packet(), msgContext.inPort());
+ break;
+ case REQUEST:
+ replyInternal(msgContext);
+ break;
+ default:
return false;
}
+
context.block();
return true;
}
@@ -444,4 +381,148 @@ public class ProxyArpManager implements ProxyArpService {
eth.setPayload(ipv6);
return eth;
}
+
+ /**
+ * Attempts to create a MessageContext for the given Ethernet frame. If the
+ * frame is a valid ARP or NDP request or response, a context will be
+ * created.
+ *
+ * @param eth input Ethernet frame
+ * @param inPort in port
+ * @return MessageContext if the packet was ARP or NDP, otherwise null
+ */
+ private MessageContext createContext(Ethernet eth, ConnectPoint inPort) {
+ if (eth.getEtherType() == Ethernet.TYPE_ARP) {
+ return createArpContext(eth, inPort);
+ } else if (eth.getEtherType() == Ethernet.TYPE_IPV6) {
+ return createNdpContext(eth, inPort);
+ }
+
+ return null;
+ }
+
+ /**
+ * Extracts context information from ARP packets.
+ *
+ * @param eth input Ethernet frame that is thought to be ARP
+ * @param inPort in port
+ * @return MessageContext object if the packet was a valid ARP packet,
+ * otherwise null
+ */
+ private MessageContext createArpContext(Ethernet eth, ConnectPoint inPort) {
+ if (eth.getEtherType() != Ethernet.TYPE_ARP) {
+ return null;
+ }
+
+ ARP arp = (ARP) eth.getPayload();
+
+ IpAddress target = Ip4Address.valueOf(arp.getTargetProtocolAddress());
+ IpAddress sender = Ip4Address.valueOf(arp.getSenderProtocolAddress());
+
+ MessageType type;
+ if (arp.getOpCode() == ARP.OP_REQUEST) {
+ type = MessageType.REQUEST;
+ } else if (arp.getOpCode() == ARP.OP_REPLY) {
+ type = MessageType.REPLY;
+ } else {
+ return null;
+ }
+
+ return new MessageContext(eth, inPort, Protocol.ARP, type, target, sender);
+ }
+
+ /**
+ * Extracts context information from NDP packets.
+ *
+ * @param eth input Ethernet frame that is thought to be NDP
+ * @param inPort in port
+ * @return MessageContext object if the packet was a valid NDP packet,
+ * otherwise null
+ */
+ private MessageContext createNdpContext(Ethernet eth, ConnectPoint inPort) {
+ if (eth.getEtherType() != Ethernet.TYPE_IPV6) {
+ return null;
+ }
+ IPv6 ipv6 = (IPv6) eth.getPayload();
+
+ if (ipv6.getNextHeader() != IPv6.PROTOCOL_ICMP6) {
+ return null;
+ }
+ ICMP6 icmpv6 = (ICMP6) ipv6.getPayload();
+
+ IpAddress sender = Ip6Address.valueOf(ipv6.getSourceAddress());
+ IpAddress target = null;
+
+ MessageType type;
+ if (icmpv6.getIcmpType() == ICMP6.NEIGHBOR_SOLICITATION) {
+ type = MessageType.REQUEST;
+ NeighborSolicitation nsol = (NeighborSolicitation) icmpv6.getPayload();
+ target = Ip6Address.valueOf(nsol.getTargetAddress());
+ } else if (icmpv6.getIcmpType() == ICMP6.NEIGHBOR_ADVERTISEMENT) {
+ type = MessageType.REPLY;
+ } else {
+ return null;
+ }
+
+ return new MessageContext(eth, inPort, Protocol.NDP, type, target, sender);
+ }
+
+ /**
+ * Provides context information for a particular ARP or NDP message, with
+ * a unified interface to access data regardless of protocol.
+ */
+ private class MessageContext {
+ private Protocol protocol;
+ private MessageType type;
+
+ private IpAddress target;
+ private IpAddress sender;
+
+ private Ethernet eth;
+ private ConnectPoint inPort;
+
+
+ public MessageContext(Ethernet eth, ConnectPoint inPort,
+ Protocol protocol, MessageType type,
+ IpAddress target, IpAddress sender) {
+ this.eth = eth;
+ this.inPort = inPort;
+ this.protocol = protocol;
+ this.type = type;
+ this.target = target;
+ this.sender = sender;
+ }
+
+ public ConnectPoint inPort() {
+ return inPort;
+ }
+
+ public Ethernet packet() {
+ return eth;
+ }
+
+ public Protocol protocol() {
+ return protocol;
+ }
+
+ public MessageType type() {
+ return type;
+ }
+
+ public VlanId vlan() {
+ return VlanId.vlanId(eth.getVlanID());
+ }
+
+ public MacAddress srcMac() {
+ return MacAddress.valueOf(eth.getSourceMACAddress());
+ }
+
+ public IpAddress target() {
+ return target;
+ }
+
+ public IpAddress sender() {
+ return sender;
+ }
+ }
}
diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/net/statistic/impl/StatisticManager.java b/framework/src/onos/core/net/src/main/java/org/onosproject/net/statistic/impl/StatisticManager.java
index 996ad14e..57964d69 100644
--- a/framework/src/onos/core/net/src/main/java/org/onosproject/net/statistic/impl/StatisticManager.java
+++ b/framework/src/onos/core/net/src/main/java/org/onosproject/net/statistic/impl/StatisticManager.java
@@ -348,12 +348,7 @@ public class StatisticManager implements StatisticService {
* @return predicate
*/
private static Predicate<FlowEntry> hasApplicationId(ApplicationId appId) {
- return new Predicate<FlowEntry>() {
- @Override
- public boolean apply(FlowEntry flowEntry) {
- return flowEntry.appId() == appId.id();
- }
- };
+ return flowEntry -> flowEntry.appId() == appId.id();
}
/**
@@ -364,16 +359,13 @@ public class StatisticManager implements StatisticService {
* @return predicate
*/
private static Predicate<FlowEntry> hasGroupId(Optional<GroupId> groupId) {
- return new Predicate<FlowEntry>() {
- @Override
- public boolean apply(FlowEntry flowEntry) {
- if (!groupId.isPresent()) {
- return false;
- }
- // FIXME: The left hand type and right hand type don't match
- // FlowEntry.groupId() still returns a short value, not int.
- return flowEntry.groupId().equals(groupId.get());
+ return flowEntry -> {
+ if (!groupId.isPresent()) {
+ return false;
}
+ // FIXME: The left hand type and right hand type don't match
+ // FlowEntry.groupId() still returns a short value, not int.
+ return flowEntry.groupId().equals(groupId.get());
};
}
}
diff --git a/framework/src/onos/core/net/src/test/java/org/onosproject/net/device/impl/BasicDeviceOperatorTest.java b/framework/src/onos/core/net/src/test/java/org/onosproject/net/device/impl/BasicDeviceOperatorTest.java
index 8827c558..2be0df7a 100644
--- a/framework/src/onos/core/net/src/test/java/org/onosproject/net/device/impl/BasicDeviceOperatorTest.java
+++ b/framework/src/onos/core/net/src/test/java/org/onosproject/net/device/impl/BasicDeviceOperatorTest.java
@@ -24,7 +24,6 @@ import java.net.URI;
import org.junit.Before;
import org.junit.Test;
import org.onlab.packet.ChassisId;
-import org.onosproject.net.config.Config;
import org.onosproject.net.config.ConfigApplyDelegate;
import org.onosproject.net.config.basics.BasicDeviceConfig;
import org.onosproject.net.AnnotationKeys;
@@ -55,11 +54,7 @@ public class BasicDeviceOperatorTest {
private static final DeviceDescription DEV1 = new DefaultDeviceDescription(
DURI, SWITCH, MFR, HW, SW, SN, CID, SA);
- private final ConfigApplyDelegate delegate = new ConfigApplyDelegate() {
- @Override
- public void onApply(Config config) {
- }
- };
+ private final ConfigApplyDelegate delegate = config -> { };
private final ObjectMapper mapper = new ObjectMapper();
private static final BasicDeviceConfig SW_BDC = new BasicDeviceConfig();
diff --git a/framework/src/onos/core/net/src/test/java/org/onosproject/net/device/impl/OpticalPortOperatorTest.java b/framework/src/onos/core/net/src/test/java/org/onosproject/net/device/impl/OpticalPortOperatorTest.java
index 78bc08e0..ba40b2b1 100644
--- a/framework/src/onos/core/net/src/test/java/org/onosproject/net/device/impl/OpticalPortOperatorTest.java
+++ b/framework/src/onos/core/net/src/test/java/org/onosproject/net/device/impl/OpticalPortOperatorTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.net.device.impl;
import org.junit.Before;
diff --git a/framework/src/onos/core/net/src/test/java/org/onosproject/net/group/impl/GroupManagerTest.java b/framework/src/onos/core/net/src/test/java/org/onosproject/net/group/impl/GroupManagerTest.java
index ae7cc874..73ce3936 100644
--- a/framework/src/onos/core/net/src/test/java/org/onosproject/net/group/impl/GroupManagerTest.java
+++ b/framework/src/onos/core/net/src/test/java/org/onosproject/net/group/impl/GroupManagerTest.java
@@ -276,10 +276,10 @@ public class GroupManagerTest {
PortNumber[] addPorts = {PortNumber.portNumber(51),
PortNumber.portNumber(52)};
List<PortNumber> outPorts;
- outPorts = new ArrayList<PortNumber>();
+ outPorts = new ArrayList<>();
outPorts.addAll(Arrays.asList(addPorts));
List<GroupBucket> addBuckets;
- addBuckets = new ArrayList<GroupBucket>();
+ addBuckets = new ArrayList<>();
for (PortNumber portNumber: outPorts) {
TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder();
tBuilder.setOutput(portNumber)
diff --git a/framework/src/onos/core/net/src/test/java/org/onosproject/net/host/impl/BasicHostOperatorTest.java b/framework/src/onos/core/net/src/test/java/org/onosproject/net/host/impl/BasicHostOperatorTest.java
index e7f14b5d..940ed919 100644
--- a/framework/src/onos/core/net/src/test/java/org/onosproject/net/host/impl/BasicHostOperatorTest.java
+++ b/framework/src/onos/core/net/src/test/java/org/onosproject/net/host/impl/BasicHostOperatorTest.java
@@ -22,7 +22,6 @@ import org.junit.Test;
import org.onlab.packet.IpAddress;
import org.onlab.packet.MacAddress;
import org.onlab.packet.VlanId;
-import org.onosproject.net.config.Config;
import org.onosproject.net.config.ConfigApplyDelegate;
import org.onosproject.net.config.basics.BasicHostConfig;
import org.onosproject.net.AnnotationKeys;
@@ -49,11 +48,7 @@ public class BasicHostOperatorTest {
);
private static final HostDescription HOST = new DefaultHostDescription(MAC, VLAN, LOC, IP);
- private final ConfigApplyDelegate delegate = new ConfigApplyDelegate() {
- @Override
- public void onApply(Config config) {
- }
- };
+ private final ConfigApplyDelegate delegate = config -> { };
private final ObjectMapper mapper = new ObjectMapper();
private static final BasicHostConfig BHC = new BasicHostConfig();
diff --git a/framework/src/onos/core/net/src/test/java/org/onosproject/net/host/impl/HostManagerTest.java b/framework/src/onos/core/net/src/test/java/org/onosproject/net/host/impl/HostManagerTest.java
index dbb807f8..92c6c931 100644
--- a/framework/src/onos/core/net/src/test/java/org/onosproject/net/host/impl/HostManagerTest.java
+++ b/framework/src/onos/core/net/src/test/java/org/onosproject/net/host/impl/HostManagerTest.java
@@ -15,36 +15,22 @@
*/
package org.onosproject.net.host.impl;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.onosproject.net.NetTestTools.injectEventDispatcher;
-import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_MOVED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_REMOVED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_UPDATED;
-
-import java.util.List;
-import java.util.Set;
-
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.onlab.packet.IpAddress;
-import org.onlab.packet.IpPrefix;
import org.onlab.packet.MacAddress;
import org.onlab.packet.VlanId;
-import org.onosproject.event.Event;
import org.onosproject.common.event.impl.TestEventDispatcher;
-import org.onosproject.net.config.NetworkConfigServiceAdapter;
-import org.onosproject.net.ConnectPoint;
+import org.onosproject.event.Event;
import org.onosproject.net.DeviceId;
import org.onosproject.net.Host;
import org.onosproject.net.HostId;
import org.onosproject.net.HostLocation;
import org.onosproject.net.PortNumber;
+import org.onosproject.net.config.NetworkConfigServiceAdapter;
import org.onosproject.net.host.DefaultHostDescription;
import org.onosproject.net.host.HostDescription;
import org.onosproject.net.host.HostEvent;
@@ -52,14 +38,23 @@ import org.onosproject.net.host.HostListener;
import org.onosproject.net.host.HostProvider;
import org.onosproject.net.host.HostProviderRegistry;
import org.onosproject.net.host.HostProviderService;
-import org.onosproject.net.host.InterfaceIpAddress;
-import org.onosproject.net.host.PortAddresses;
import org.onosproject.net.provider.AbstractProvider;
import org.onosproject.net.provider.ProviderId;
import org.onosproject.store.trivial.SimpleHostStore;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
+import java.util.List;
+import java.util.Set;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.onosproject.net.NetTestTools.injectEventDispatcher;
+import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
+import static org.onosproject.net.host.HostEvent.Type.HOST_MOVED;
+import static org.onosproject.net.host.HostEvent.Type.HOST_REMOVED;
+import static org.onosproject.net.host.HostEvent.Type.HOST_UPDATED;
/**
* Test codifying the host service & host provider service contracts.
@@ -90,27 +85,6 @@ public class HostManagerTest {
private static final PortNumber P2 = PortNumber.portNumber(200);
private static final HostLocation LOC1 = new HostLocation(DID1, P1, 123L);
private static final HostLocation LOC2 = new HostLocation(DID1, P2, 123L);
- private static final ConnectPoint CP1 = new ConnectPoint(DID1, P1);
- private static final ConnectPoint CP2 = new ConnectPoint(DID2, P2);
-
- private static final InterfaceIpAddress IA1 =
- new InterfaceIpAddress(IpAddress.valueOf("10.1.1.1"),
- IpPrefix.valueOf("10.1.1.0/24"));
- private static final InterfaceIpAddress IA2 =
- new InterfaceIpAddress(IpAddress.valueOf("10.2.2.2"),
- IpPrefix.valueOf("10.2.0.0/16"));
- private static final InterfaceIpAddress IA3 =
- new InterfaceIpAddress(IpAddress.valueOf("10.3.3.3"),
- IpPrefix.valueOf("10.3.3.0/24"));
- private static final InterfaceIpAddress IA4 =
- new InterfaceIpAddress(IpAddress.valueOf("2001:100::1"),
- IpPrefix.valueOf("2001:100::/56"));
- private static final InterfaceIpAddress IA5 =
- new InterfaceIpAddress(IpAddress.valueOf("2001:200::1"),
- IpPrefix.valueOf("2001:200::/48"));
- private static final InterfaceIpAddress IA6 =
- new InterfaceIpAddress(IpAddress.valueOf("2001:300::1"),
- IpPrefix.valueOf("2001:300::/56"));
private HostManager mgr;
@@ -290,240 +264,6 @@ public class HostManagerTest {
}
- @Test
- public void bindAddressesToPort() {
- PortAddresses add1 =
- new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
-
- mgr.bindAddressesToPort(add1);
- Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- assertEquals(1, storedAddresses.size());
- assertTrue(storedAddresses.contains(add1));
-
- // Add some more addresses and check that they're added correctly
- PortAddresses add2 =
- new PortAddresses(CP1, Sets.newHashSet(IA3), null,
- VlanId.vlanId((short) 2));
-
- mgr.bindAddressesToPort(add2);
- storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- assertEquals(2, storedAddresses.size());
- assertTrue(storedAddresses.contains(add1));
- assertTrue(storedAddresses.contains(add2));
-
- PortAddresses add3 = new PortAddresses(CP1, null, MAC2, VlanId.NONE);
-
- mgr.bindAddressesToPort(add3);
- storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- assertEquals(3, storedAddresses.size());
- assertTrue(storedAddresses.contains(add1));
- assertTrue(storedAddresses.contains(add2));
- assertTrue(storedAddresses.contains(add3));
- }
-
- @Test
- public void bindAddressesToPortIPv6() {
- PortAddresses add1 =
- new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
-
- mgr.bindAddressesToPort(add1);
- Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- assertEquals(1, storedAddresses.size());
- assertTrue(storedAddresses.contains(add1));
-
- // Add some more addresses and check that they're added correctly
- PortAddresses add2 =
- new PortAddresses(CP1, Sets.newHashSet(IA6), null,
- VlanId.vlanId((short) 2));
-
- mgr.bindAddressesToPort(add2);
- storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- assertEquals(2, storedAddresses.size());
- assertTrue(storedAddresses.contains(add1));
- assertTrue(storedAddresses.contains(add2));
-
- PortAddresses add3 = new PortAddresses(CP1, null, MAC4, VlanId.NONE);
-
- mgr.bindAddressesToPort(add3);
- storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- assertEquals(3, storedAddresses.size());
- assertTrue(storedAddresses.contains(add1));
- assertTrue(storedAddresses.contains(add2));
- assertTrue(storedAddresses.contains(add3));
- }
-
- @Test
- public void unbindAddressesFromPort() {
- PortAddresses add1 =
- new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
-
- mgr.bindAddressesToPort(add1);
- Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- assertEquals(1, storedAddresses.size());
- assertTrue(storedAddresses.contains(add1));
-
- PortAddresses rem1 =
- new PortAddresses(CP1, Sets.newHashSet(IA1), null, VlanId.NONE);
-
- mgr.unbindAddressesFromPort(rem1);
- storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- // It shouldn't have been removed because it didn't match the originally
- // submitted address object
- assertEquals(1, storedAddresses.size());
- assertTrue(storedAddresses.contains(add1));
-
- mgr.unbindAddressesFromPort(add1);
- storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- assertTrue(storedAddresses.isEmpty());
- }
-
- @Test
- public void unbindAddressesFromPortIPv6() {
- PortAddresses add1 =
- new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
-
- mgr.bindAddressesToPort(add1);
- Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- assertEquals(1, storedAddresses.size());
- assertTrue(storedAddresses.contains(add1));
-
- PortAddresses rem1 =
- new PortAddresses(CP1, Sets.newHashSet(IA4), null, VlanId.NONE);
-
- mgr.unbindAddressesFromPort(rem1);
- storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- // It shouldn't have been removed because it didn't match the originally
- // submitted address object
- assertEquals(1, storedAddresses.size());
- assertTrue(storedAddresses.contains(add1));
-
- mgr.unbindAddressesFromPort(add1);
- storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- assertTrue(storedAddresses.isEmpty());
- }
-
- @Test
- public void clearAddresses() {
- PortAddresses add1 =
- new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
-
- mgr.bindAddressesToPort(add1);
- Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- assertEquals(1, storedAddresses.size());
- assertTrue(storedAddresses.contains(add1));
-
- mgr.clearAddresses(CP1);
- storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- assertTrue(storedAddresses.isEmpty());
- }
-
- @Test
- public void clearAddressesIPv6() {
- PortAddresses add1 =
- new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
-
- mgr.bindAddressesToPort(add1);
- Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- assertEquals(1, storedAddresses.size());
- assertTrue(storedAddresses.contains(add1));
-
- mgr.clearAddresses(CP1);
- storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- assertTrue(storedAddresses.isEmpty());
- }
-
- @Test
- public void getAddressBindingsForPort() {
- PortAddresses add1 =
- new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
-
- mgr.bindAddressesToPort(add1);
- Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- assertEquals(1, storedAddresses.size());
- assertTrue(storedAddresses.contains(add1));
- }
-
- @Test
- public void getAddressBindingsForPortIPv6() {
- PortAddresses add1 =
- new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
-
- mgr.bindAddressesToPort(add1);
- Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
-
- assertEquals(1, storedAddresses.size());
- assertTrue(storedAddresses.contains(add1));
- }
-
- @Test
- public void getAddressBindings() {
- Set<PortAddresses> storedAddresses = mgr.getAddressBindings();
-
- assertTrue(storedAddresses.isEmpty());
-
- PortAddresses add1 =
- new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
-
- mgr.bindAddressesToPort(add1);
-
- storedAddresses = mgr.getAddressBindings();
-
- assertTrue(storedAddresses.size() == 1);
-
- PortAddresses add2 =
- new PortAddresses(CP2, Sets.newHashSet(IA3), MAC2, VlanId.NONE);
-
- mgr.bindAddressesToPort(add2);
-
- storedAddresses = mgr.getAddressBindings();
-
- assertTrue(storedAddresses.size() == 2);
- assertTrue(storedAddresses.equals(Sets.newHashSet(add1, add2)));
- }
-
- @Test
- public void getAddressBindingsIPv6() {
- Set<PortAddresses> storedAddresses = mgr.getAddressBindings();
-
- assertTrue(storedAddresses.isEmpty());
-
- PortAddresses add1 =
- new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
-
- mgr.bindAddressesToPort(add1);
-
- storedAddresses = mgr.getAddressBindings();
-
- assertTrue(storedAddresses.size() == 1);
-
- PortAddresses add2 =
- new PortAddresses(CP2, Sets.newHashSet(IA5), MAC4, VlanId.NONE);
-
- mgr.bindAddressesToPort(add2);
-
- storedAddresses = mgr.getAddressBindings();
-
- assertTrue(storedAddresses.size() == 2);
- assertTrue(storedAddresses.equals(Sets.newHashSet(add1, add2)));
- }
-
private class TestNetworkConfigService extends NetworkConfigServiceAdapter {
}
}
diff --git a/framework/src/onos/core/net/src/test/java/org/onosproject/net/host/impl/HostMonitorTest.java b/framework/src/onos/core/net/src/test/java/org/onosproject/net/host/impl/HostMonitorTest.java
index d6ff473a..d167197a 100644
--- a/framework/src/onos/core/net/src/test/java/org/onosproject/net/host/impl/HostMonitorTest.java
+++ b/framework/src/onos/core/net/src/test/java/org/onosproject/net/host/impl/HostMonitorTest.java
@@ -19,6 +19,7 @@ import com.google.common.collect.HashMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import org.junit.After;
+import org.junit.Before;
import org.junit.Test;
import org.onlab.packet.ARP;
import org.onlab.packet.Ethernet;
@@ -37,11 +38,11 @@ import org.onosproject.net.Port;
import org.onosproject.net.PortNumber;
import org.onosproject.net.device.DeviceListener;
import org.onosproject.net.device.DeviceServiceAdapter;
+import org.onosproject.net.edge.EdgePortService;
import org.onosproject.net.flow.instructions.Instruction;
import org.onosproject.net.flow.instructions.Instructions.OutputInstruction;
import org.onosproject.net.host.HostProvider;
import org.onosproject.net.host.InterfaceIpAddress;
-import org.onosproject.net.host.PortAddresses;
import org.onosproject.net.packet.OutboundPacket;
import org.onosproject.net.packet.PacketServiceAdapter;
import org.onosproject.net.provider.ProviderId;
@@ -51,6 +52,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Set;
+import static org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
@@ -70,8 +72,18 @@ public class HostMonitorTest {
new InterfaceIpAddress(SOURCE_ADDR, IpPrefix.valueOf("10.0.0.0/24"));
private MacAddress sourceMac = MacAddress.valueOf(1L);
+ private EdgePortService edgePortService;
+
private HostMonitor hostMonitor;
+ @Before
+ public void setUp() {
+ edgePortService = createMock(EdgePortService.class);
+ expect(edgePortService.isEdgePoint(anyObject(ConnectPoint.class)))
+ .andReturn(true).anyTimes();
+ replay(edgePortService);
+ }
+
@After
public void shutdown() {
hostMonitor.shutdown();
@@ -96,7 +108,7 @@ public class HostMonitorTest {
expectLastCall().once();
replay(hostProvider);
- hostMonitor = new HostMonitor(null, hostManager, null);
+ hostMonitor = new HostMonitor(null, hostManager, null, edgePortService);
hostMonitor.registerHostProvider(hostProvider);
hostMonitor.addMonitoringFor(TARGET_IP_ADDR);
@@ -127,8 +139,6 @@ public class HostMonitorTest {
deviceService.addDevice(device, Collections.singleton(port));
ConnectPoint cp = new ConnectPoint(devId, portNum);
- PortAddresses pa =
- new PortAddresses(cp, Collections.singleton(IA1), sourceMac, VlanId.NONE);
expect(hostManager.getHostsByIp(TARGET_IP_ADDR))
.andReturn(Collections.emptySet()).anyTimes();
@@ -144,7 +154,7 @@ public class HostMonitorTest {
// Run the test
- hostMonitor = new HostMonitor(packetService, hostManager, interfaceService);
+ hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService);
hostMonitor.addMonitoringFor(TARGET_IP_ADDR);
hostMonitor.run(null);
@@ -198,9 +208,6 @@ public class HostMonitorTest {
deviceService.addDevice(device, Collections.singleton(port));
ConnectPoint cp = new ConnectPoint(devId, portNum);
- PortAddresses pa =
- new PortAddresses(cp, Collections.singleton(IA1), sourceMac,
- VlanId.vlanId(vlan));
expect(hostManager.getHostsByIp(TARGET_IP_ADDR))
.andReturn(Collections.emptySet()).anyTimes();
@@ -216,7 +223,7 @@ public class HostMonitorTest {
// Run the test
- hostMonitor = new HostMonitor(packetService, hostManager, interfaceService);
+ hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService);
hostMonitor.addMonitoringFor(TARGET_IP_ADDR);
hostMonitor.run(null);
diff --git a/framework/src/onos/core/net/src/test/java/org/onosproject/net/intent/impl/MockFlowRuleService.java b/framework/src/onos/core/net/src/test/java/org/onosproject/net/intent/impl/MockFlowRuleService.java
index 8bd29bf8..f23a049d 100644
--- a/framework/src/onos/core/net/src/test/java/org/onosproject/net/intent/impl/MockFlowRuleService.java
+++ b/framework/src/onos/core/net/src/test/java/org/onosproject/net/intent/impl/MockFlowRuleService.java
@@ -24,13 +24,11 @@ import org.onosproject.net.flow.FlowRule;
import org.onosproject.net.flow.FlowRuleOperations;
import org.onosproject.net.flow.FlowRuleServiceAdapter;
+import java.util.Collections;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
-import static org.onosproject.net.flow.FlowRuleOperation.Type.REMOVE;
-
-
public class MockFlowRuleService extends FlowRuleServiceAdapter {
final Set<FlowRule> flows = Sets.newHashSet();
@@ -87,9 +85,7 @@ public class MockFlowRuleService extends FlowRuleServiceAdapter {
@Override
public void applyFlowRules(FlowRule... flowRules) {
- for (FlowRule flow : flowRules) {
- flows.add(flow);
- }
+ Collections.addAll(flows, flowRules);
}
@Override
diff --git a/framework/src/onos/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/MplsIntentCompilerTest.java b/framework/src/onos/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/MplsIntentCompilerTest.java
index 76b26f46..03a38a5a 100644
--- a/framework/src/onos/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/MplsIntentCompilerTest.java
+++ b/framework/src/onos/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/MplsIntentCompilerTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.net.intent.impl.compiler;
import java.util.List;
diff --git a/framework/src/onos/core/net/src/test/java/org/onosproject/net/link/impl/BasicLinkOperatorTest.java b/framework/src/onos/core/net/src/test/java/org/onosproject/net/link/impl/BasicLinkOperatorTest.java
index fe9e37cd..eadbb5c9 100644
--- a/framework/src/onos/core/net/src/test/java/org/onosproject/net/link/impl/BasicLinkOperatorTest.java
+++ b/framework/src/onos/core/net/src/test/java/org/onosproject/net/link/impl/BasicLinkOperatorTest.java
@@ -22,7 +22,6 @@ import static org.junit.Assert.assertEquals;
import java.time.Duration;
import org.junit.Before;
import org.junit.Test;
-import org.onosproject.net.config.Config;
import org.onosproject.net.config.ConfigApplyDelegate;
import org.onosproject.net.config.basics.BasicLinkConfig;
import org.onosproject.net.AnnotationKeys;
@@ -53,11 +52,7 @@ public class BasicLinkOperatorTest {
private static final SparseAnnotations SA = DefaultAnnotations.builder()
.set(AnnotationKeys.DURABLE, "true").build();
private static final LinkDescription LD = new DefaultLinkDescription(SRC, DST, Link.Type.DIRECT, SA);
- private final ConfigApplyDelegate delegate = new ConfigApplyDelegate() {
- @Override
- public void onApply(Config config) {
- }
- };
+ private final ConfigApplyDelegate delegate = config -> { };
private final ObjectMapper mapper = new ObjectMapper();
private static final BasicLinkConfig BLC = new BasicLinkConfig();
diff --git a/framework/src/onos/core/pom.xml b/framework/src/onos/core/pom.xml
index 0f7dd8c8..c4f25545 100644
--- a/framework/src/onos/core/pom.xml
+++ b/framework/src/onos/core/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/core/security/pom.xml b/framework/src/onos/core/security/pom.xml
index 67e74a1e..8dbc6c0d 100644
--- a/framework/src/onos/core/security/pom.xml
+++ b/framework/src/onos/core/security/pom.xml
@@ -1,4 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright 2015 Open Networking Laboratory
+ ~
+ ~ 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.
+ -->
<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">
@@ -7,7 +22,7 @@
<parent>
<artifactId>onos-core</artifactId>
<groupId>org.onosproject</groupId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/core/security/src/main/java/org/onosproject/security/impl/DefaultPolicyBuilder.java b/framework/src/onos/core/security/src/main/java/org/onosproject/security/impl/DefaultPolicyBuilder.java
index 8ae1a1ae..b043765a 100644
--- a/framework/src/onos/core/security/src/main/java/org/onosproject/security/impl/DefaultPolicyBuilder.java
+++ b/framework/src/onos/core/security/src/main/java/org/onosproject/security/impl/DefaultPolicyBuilder.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.security.impl;
diff --git a/framework/src/onos/core/security/src/main/java/org/onosproject/security/impl/SecurityModeManager.java b/framework/src/onos/core/security/src/main/java/org/onosproject/security/impl/SecurityModeManager.java
index 30b0f8bb..325f49be 100644
--- a/framework/src/onos/core/security/src/main/java/org/onosproject/security/impl/SecurityModeManager.java
+++ b/framework/src/onos/core/security/src/main/java/org/onosproject/security/impl/SecurityModeManager.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.security.impl;
import com.google.common.collect.Lists;
@@ -43,10 +58,11 @@ import org.slf4j.Logger;
import static org.slf4j.LoggerFactory.getLogger;
-
-
/**
* Security-Mode ONOS management implementation.
+ *
+ * Note: Activating Security-Mode ONOS has significant performance implications in Drake.
+ * See the wiki for instructions on how to activate it.
*/
@Component(immediate = true)
diff --git a/framework/src/onos/core/security/src/main/java/org/onosproject/security/store/package-info.java b/framework/src/onos/core/security/src/main/java/org/onosproject/security/store/package-info.java
new file mode 100644
index 00000000..a47f8eaf
--- /dev/null
+++ b/framework/src/onos/core/security/src/main/java/org/onosproject/security/store/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Security-Mode ONOS distributed store.
+ */
+package org.onosproject.security.store;
diff --git a/framework/src/onos/core/store/dist/pom.xml b/framework/src/onos/core/store/dist/pom.xml
index eb9c38a5..cc293da4 100644
--- a/framework/src/onos/core/store/dist/pom.xml
+++ b/framework/src/onos/core/store/dist/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-core-store</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/ClusterDefinitionManager.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/ClusterDefinitionManager.java
index 4e28e3c2..8b0001d8 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/ClusterDefinitionManager.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/ClusterDefinitionManager.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.store.cluster.impl;
import com.google.common.collect.ImmutableSet;
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/IOLoopMessagingManager.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/IOLoopMessagingManager.java
index 9e52c3e3..ffdd25f2 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/IOLoopMessagingManager.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/IOLoopMessagingManager.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.store.cluster.messaging.impl;
import org.apache.felix.scr.annotations.Activate;
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/NettyMessagingManager.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/NettyMessagingManager.java
index 8b2cc8e2..9328817b 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/NettyMessagingManager.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/NettyMessagingManager.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.store.cluster.messaging.impl;
import com.google.common.base.Strings;
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/ConsistentMapBackedJavaMap.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/ConsistentMapBackedJavaMap.java
index 58aca31a..5183924c 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/ConsistentMapBackedJavaMap.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/ConsistentMapBackedJavaMap.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.store.consistent.impl;
import java.util.Collection;
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DatabaseManager.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DatabaseManager.java
index b7c3794b..fbc2c88d 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DatabaseManager.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DatabaseManager.java
@@ -47,7 +47,6 @@ import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.felix.scr.annotations.Service;
-
import org.onosproject.app.ApplicationEvent;
import org.onosproject.app.ApplicationListener;
import org.onosproject.app.ApplicationService;
@@ -252,7 +251,7 @@ public class DatabaseManager implements StorageService, StorageAdminService {
log.info("Successfully closed databases.");
}
});
- maps.values().forEach(this::unregisterMap);
+ ImmutableList.copyOf(maps.values()).forEach(this::unregisterMap);
if (applicationService != null) {
applicationService.removeListener(appListener);
}
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DefaultDatabaseState.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DefaultDatabaseState.java
index 9d3505bd..9a55ffb1 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DefaultDatabaseState.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DefaultDatabaseState.java
@@ -84,7 +84,7 @@ public class DefaultDatabaseState implements DatabaseState<String, byte[]> {
}
nextVersion = context.get("nextVersion");
if (nextVersion == null) {
- nextVersion = new Long(0);
+ nextVersion = 0L;
context.put("nextVersion", nextVersion);
}
}
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/core/impl/ConsistentApplicationIdStore.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/core/impl/ConsistentApplicationIdStore.java
index e54b0ee5..7c3769a3 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/core/impl/ConsistentApplicationIdStore.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/core/impl/ConsistentApplicationIdStore.java
@@ -19,8 +19,6 @@ import static org.slf4j.LoggerFactory.getLogger;
import java.util.Map;
import java.util.Set;
-import java.util.concurrent.ScheduledExecutorService;
-
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -61,7 +59,6 @@ public class ConsistentApplicationIdStore implements ApplicationIdStore {
private ConsistentMap<String, ApplicationId> registeredIds;
private Map<String, ApplicationId> nameToAppIdCache = Maps.newConcurrentMap();
private Map<Short, ApplicationId> idToAppIdCache = Maps.newConcurrentMap();
- private ScheduledExecutorService executor;
private static final Serializer SERIALIZER = Serializer.using(new KryoNamespace.Builder()
.register(KryoNamespaces.API)
@@ -88,7 +85,6 @@ public class ConsistentApplicationIdStore implements ApplicationIdStore {
@Deactivate
public void deactivate() {
- executor.shutdown();
log.info("Stopped");
}
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/core/impl/ConsistentIdBlockStore.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/core/impl/ConsistentIdBlockStore.java
index 8913742d..c6f48a44 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/core/impl/ConsistentIdBlockStore.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/core/impl/ConsistentIdBlockStore.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.store.core.impl;
import com.google.common.collect.Maps;
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/core/impl/LogicalClockManager.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/core/impl/LogicalClockManager.java
index ccf0f326..6a667e32 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/core/impl/LogicalClockManager.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/core/impl/LogicalClockManager.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.store.core.impl;
import static org.slf4j.LoggerFactory.getLogger;
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceDescriptions.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceDescriptions.java
index fd7fcd80..23206725 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceDescriptions.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceDescriptions.java
@@ -82,7 +82,7 @@ class DeviceDescriptions {
if (oldOne != null) {
SparseAnnotations merged = union(oldOne.value().annotations(),
newDesc.value().annotations());
- newOne = new Timestamped<DeviceDescription>(
+ newOne = new Timestamped<>(
new DefaultDeviceDescription(newDesc.value(), merged),
newDesc.timestamp());
}
@@ -104,27 +104,27 @@ class DeviceDescriptions {
switch (newDesc.value().type()) {
case OMS:
OmsPortDescription omsDesc = (OmsPortDescription) (newDesc.value());
- newOne = new Timestamped<PortDescription>(
+ newOne = new Timestamped<>(
new OmsPortDescription(
omsDesc, omsDesc.minFrequency(), omsDesc.maxFrequency(), omsDesc.grid(), merged),
newDesc.timestamp());
break;
case OCH:
OchPortDescription ochDesc = (OchPortDescription) (newDesc.value());
- newOne = new Timestamped<PortDescription>(
+ newOne = new Timestamped<>(
new OchPortDescription(
ochDesc, ochDesc.signalType(), ochDesc.isTunable(), ochDesc.lambda(), merged),
newDesc.timestamp());
break;
case ODUCLT:
OduCltPortDescription ocDesc = (OduCltPortDescription) (newDesc.value());
- newOne = new Timestamped<PortDescription>(
+ newOne = new Timestamped<>(
new OduCltPortDescription(
ocDesc, ocDesc.signalType(), merged),
newDesc.timestamp());
break;
default:
- newOne = new Timestamped<PortDescription>(
+ newOne = new Timestamped<>(
new DefaultPortDescription(newDesc.value(), merged),
newDesc.timestamp());
}
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceInjectedEvent.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceInjectedEvent.java
index 6f93963a..3c3bbb65 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceInjectedEvent.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceInjectedEvent.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.store.device.impl;
import com.google.common.base.MoreObjects;
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
index 63456433..973db494 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
@@ -15,7 +15,6 @@
*/
package org.onosproject.store.device.impl;
-import com.google.common.base.Function;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Maps;
@@ -564,13 +563,10 @@ public class GossipDeviceStore
final DeviceDescriptions descs = device.get(providerId);
List<PortDescription> mergedList =
FluentIterable.from(portDescriptions)
- .transform(new Function<PortDescription, PortDescription>() {
- @Override
- public PortDescription apply(PortDescription input) {
- // lookup merged port description
- return descs.getPortDesc(input.portNumber()).value();
- }
- }).toList();
+ .transform(input ->
+ // lookup merged port description
+ descs.getPortDesc(input.portNumber()).value()
+ ).toList();
merged = new Timestamped<>(mergedList, newTimestamp);
}
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/PortFragmentId.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/PortFragmentId.java
index ed0ccaa1..1ff05198 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/PortFragmentId.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/PortFragmentId.java
@@ -41,7 +41,7 @@ public final class PortFragmentId {
@Override
public int hashCode() {
return Objects.hash(providerId, deviceId, portNumber);
- };
+ }
@Override
public boolean equals(Object obj) {
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/PortInjectedEvent.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/PortInjectedEvent.java
index c80f8105..971f53db 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/PortInjectedEvent.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/device/impl/PortInjectedEvent.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.store.device.impl;
import com.google.common.base.MoreObjects;
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/flow/ReplicaInfoEvent.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/flow/ReplicaInfoEvent.java
index 5eafc7ed..962fe8f4 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/flow/ReplicaInfoEvent.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/flow/ReplicaInfoEvent.java
@@ -60,5 +60,5 @@ public class ReplicaInfoEvent extends AbstractEvent<ReplicaInfoEvent.Type, Devic
*/
public ReplicaInfo replicaInfo() {
return replicaInfo;
- };
+ }
}
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java
index cf48dcb8..97333ebf 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java
@@ -131,8 +131,7 @@ public class DistributedGroupStore
private ExecutorService messageHandlingExecutor;
private static final int MESSAGE_HANDLER_THREAD_POOL_SIZE = 1;
- private final HashMap<DeviceId, Boolean> deviceAuditStatus =
- new HashMap<DeviceId, Boolean>();
+ private final HashMap<DeviceId, Boolean> deviceAuditStatus = new HashMap<>();
private final AtomicInteger groupIdGen = new AtomicInteger();
@@ -685,8 +684,7 @@ public class DistributedGroupStore
UpdateType type,
GroupBuckets buckets) {
GroupBuckets oldBuckets = oldGroup.buckets();
- List<GroupBucket> newBucketList = new ArrayList<GroupBucket>(
- oldBuckets.buckets());
+ List<GroupBucket> newBucketList = new ArrayList<>(oldBuckets.buckets());
boolean groupDescUpdated = false;
if (type == UpdateType.ADD) {
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/host/impl/ECHostStore.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/host/impl/ECHostStore.java
index d8b9daca..d0b827cd 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/host/impl/ECHostStore.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/host/impl/ECHostStore.java
@@ -1,267 +1,263 @@
-package org.onosproject.store.host.impl;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onosproject.net.DefaultAnnotations.merge;
-import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_REMOVED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_UPDATED;
-import static org.onosproject.store.service.EventuallyConsistentMapEvent.Type.PUT;
-import static org.onosproject.store.service.EventuallyConsistentMapEvent.Type.REMOVE;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Objects;
-import java.util.Set;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
-
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.Service;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.VlanId;
-import org.onlab.util.KryoNamespace;
-import org.onosproject.net.Annotations;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.DefaultAnnotations;
-import org.onosproject.net.DefaultHost;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.host.HostDescription;
-import org.onosproject.net.host.HostEvent;
-import org.onosproject.net.host.HostStore;
-import org.onosproject.net.host.HostStoreDelegate;
-import org.onosproject.net.host.PortAddresses;
-import org.onosproject.net.host.HostEvent.Type;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.store.AbstractStore;
-import org.onosproject.store.serializers.KryoNamespaces;
-import org.onosproject.store.service.EventuallyConsistentMap;
-import org.onosproject.store.service.EventuallyConsistentMapEvent;
-import org.onosproject.store.service.EventuallyConsistentMapListener;
-import org.onosproject.store.service.LogicalClockService;
-import org.onosproject.store.service.StorageService;
-import org.slf4j.Logger;
-
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.ImmutableMultimap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Multimaps;
-import com.google.common.collect.SetMultimap;
-import com.google.common.collect.Sets;
-
-/**
- * Manages the inventory of hosts using a {@code EventuallyConsistentMap}.
- */
-@Component(immediate = true)
-@Service
-public class ECHostStore
- extends AbstractStore<HostEvent, HostStoreDelegate>
- implements HostStore {
-
- private final Logger log = getLogger(getClass());
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected StorageService storageService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected LogicalClockService clockService;
-
- // Hosts tracked by their location
- private final SetMultimap<ConnectPoint, Host> locations =
- Multimaps.synchronizedSetMultimap(
- HashMultimap.<ConnectPoint, Host>create());
-
- private final SetMultimap<ConnectPoint, PortAddresses> portAddresses =
- Multimaps.synchronizedSetMultimap(
- HashMultimap.<ConnectPoint, PortAddresses>create());
-
- private EventuallyConsistentMap<HostId, DefaultHost> hosts;
-
- private EventuallyConsistentMapListener<HostId, DefaultHost> hostLocationTracker =
- new HostLocationTracker();
-
- @Activate
- public void activate() {
- KryoNamespace.Builder hostSerializer = KryoNamespace.newBuilder()
- .register(KryoNamespaces.API);
-
- hosts = storageService.<HostId, DefaultHost>eventuallyConsistentMapBuilder()
- .withName("onos-hosts")
- .withSerializer(hostSerializer)
- .withTimestampProvider((k, v) -> clockService.getTimestamp())
- .build();
-
- hosts.addListener(hostLocationTracker);
-
- log.info("Started");
- }
-
- @Deactivate
- public void deactivate() {
- hosts.removeListener(hostLocationTracker);
- hosts.destroy();
- locations.clear();
- portAddresses.clear();
-
- log.info("Stopped");
- }
-
- @Override
- public HostEvent createOrUpdateHost(ProviderId providerId,
- HostId hostId,
- HostDescription hostDescription) {
- DefaultHost currentHost = hosts.get(hostId);
- if (currentHost == null) {
- DefaultHost newhost = new DefaultHost(
- providerId,
- hostId,
- hostDescription.hwAddress(),
- hostDescription.vlan(),
- hostDescription.location(),
- ImmutableSet.copyOf(hostDescription.ipAddress()),
- hostDescription.annotations());
- hosts.put(hostId, newhost);
- return new HostEvent(HOST_ADDED, newhost);
- }
- return updateHost(providerId, hostId, hostDescription, currentHost);
- }
-
- @Override
- public HostEvent removeHost(HostId hostId) {
- Host host = hosts.remove(hostId);
- return host != null ? new HostEvent(HOST_REMOVED, host) : null;
- }
-
- @Override
- public int getHostCount() {
- return hosts.size();
- }
-
- @Override
- public Iterable<Host> getHosts() {
- return ImmutableSet.copyOf(hosts.values());
- }
-
- @Override
- public Host getHost(HostId hostId) {
- return hosts.get(hostId);
- }
-
- @Override
- public Set<Host> getHosts(VlanId vlanId) {
- return filter(hosts.values(), host -> Objects.equals(host.vlan(), vlanId));
- }
-
- @Override
- public Set<Host> getHosts(MacAddress mac) {
- return filter(hosts.values(), host -> Objects.equals(host.mac(), mac));
- }
-
- @Override
- public Set<Host> getHosts(IpAddress ip) {
- return filter(hosts.values(), host -> host.ipAddresses().contains(ip));
- }
-
- @Override
- public Set<Host> getConnectedHosts(ConnectPoint connectPoint) {
- return ImmutableSet.copyOf(locations.get(connectPoint));
- }
-
- @Override
- public Set<Host> getConnectedHosts(DeviceId deviceId) {
- return ImmutableMultimap.copyOf(locations)
- .entries()
- .stream()
- .filter(entry -> entry.getKey().deviceId().equals(deviceId))
- .map(entry -> entry.getValue())
- .collect(Collectors.toSet());
- }
-
- @Override
- public void updateAddressBindings(PortAddresses addresses) {
- portAddresses.put(addresses.connectPoint(), addresses);
- }
-
- @Override
- public void removeAddressBindings(PortAddresses addresses) {
- portAddresses.remove(addresses.connectPoint(), addresses);
- }
-
- @Override
- public void clearAddressBindings(ConnectPoint connectPoint) {
- portAddresses.removeAll(connectPoint);
- }
-
- @Override
- public Set<PortAddresses> getAddressBindings() {
- return ImmutableSet.copyOf(portAddresses.values());
- }
-
- @Override
- public Set<PortAddresses> getAddressBindingsForPort(ConnectPoint connectPoint) {
- synchronized (portAddresses) {
- Set<PortAddresses> addresses = portAddresses.get(connectPoint);
- return addresses == null ? Collections.emptySet() : ImmutableSet.copyOf(addresses);
- }
- }
-
- private Set<Host> filter(Collection<DefaultHost> collection, Predicate<DefaultHost> predicate) {
- return collection.stream().filter(predicate).collect(Collectors.toSet());
- }
-
- // checks for type of update to host, sends appropriate event
- private HostEvent updateHost(ProviderId providerId,
- HostId hostId,
- HostDescription descr,
- DefaultHost currentHost) {
-
- final boolean hostMoved = !currentHost.location().equals(descr.location());
- if (hostMoved ||
- !currentHost.ipAddresses().containsAll(descr.ipAddress()) ||
- !descr.annotations().keys().isEmpty()) {
-
- Set<IpAddress> addresses = Sets.newHashSet(currentHost.ipAddresses());
- addresses.addAll(descr.ipAddress());
- Annotations annotations = merge((DefaultAnnotations) currentHost.annotations(),
- descr.annotations());
-
- DefaultHost updatedHost = new DefaultHost(providerId, currentHost.id(),
- currentHost.mac(), currentHost.vlan(),
- descr.location(),
- addresses,
- annotations);
-
- // TODO: We need a way to detect conflicting changes and abort update.
- hosts.put(hostId, updatedHost);
- locations.remove(currentHost.location(), currentHost);
- locations.put(updatedHost.location(), updatedHost);
-
- HostEvent.Type eventType = hostMoved ? Type.HOST_MOVED : Type.HOST_UPDATED;
- return new HostEvent(eventType, updatedHost);
- }
- return null;
- }
-
- private class HostLocationTracker implements EventuallyConsistentMapListener<HostId, DefaultHost> {
- @Override
- public void event(EventuallyConsistentMapEvent<HostId, DefaultHost> event) {
- DefaultHost host = checkNotNull(event.value());
- if (event.type() == PUT) {
- boolean isNew = locations.put(host.location(), host);
- notifyDelegate(new HostEvent(isNew ? HOST_ADDED : HOST_UPDATED, host));
- } else if (event.type() == REMOVE) {
- if (locations.remove(host.location(), host)) {
- notifyDelegate(new HostEvent(HOST_REMOVED, host));
- }
-
- }
- }
- }
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.store.host.impl;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static org.onosproject.net.DefaultAnnotations.merge;
+import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
+import static org.onosproject.net.host.HostEvent.Type.HOST_REMOVED;
+import static org.onosproject.net.host.HostEvent.Type.HOST_MOVED;
+import static org.onosproject.net.host.HostEvent.Type.HOST_UPDATED;
+import static org.onosproject.store.service.EventuallyConsistentMapEvent.Type.PUT;
+import static org.onosproject.store.service.EventuallyConsistentMapEvent.Type.REMOVE;
+import static org.slf4j.LoggerFactory.getLogger;
+
+import java.util.Collection;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.Service;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
+import org.onlab.util.KryoNamespace;
+import org.onosproject.net.Annotations;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.DefaultAnnotations;
+import org.onosproject.net.DefaultHost;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.Host;
+import org.onosproject.net.HostId;
+import org.onosproject.net.HostLocation;
+import org.onosproject.net.host.HostDescription;
+import org.onosproject.net.host.HostEvent;
+import org.onosproject.net.host.HostStore;
+import org.onosproject.net.host.HostStoreDelegate;
+import org.onosproject.net.host.HostEvent.Type;
+import org.onosproject.net.provider.ProviderId;
+import org.onosproject.store.AbstractStore;
+import org.onosproject.store.serializers.KryoNamespaces;
+import org.onosproject.store.service.EventuallyConsistentMap;
+import org.onosproject.store.service.EventuallyConsistentMapEvent;
+import org.onosproject.store.service.EventuallyConsistentMapListener;
+import org.onosproject.store.service.LogicalClockService;
+import org.onosproject.store.service.StorageService;
+import org.slf4j.Logger;
+
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Multimaps;
+import com.google.common.collect.SetMultimap;
+import com.google.common.collect.Sets;
+
+/**
+ * Manages the inventory of hosts using a {@code EventuallyConsistentMap}.
+ */
+@Component(immediate = true)
+@Service
+public class ECHostStore
+ extends AbstractStore<HostEvent, HostStoreDelegate>
+ implements HostStore {
+
+ private final Logger log = getLogger(getClass());
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected StorageService storageService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected LogicalClockService clockService;
+
+ // Hosts tracked by their location
+ private final SetMultimap<ConnectPoint, Host> locations =
+ Multimaps.synchronizedSetMultimap(
+ HashMultimap.<ConnectPoint, Host>create());
+
+ private EventuallyConsistentMap<HostId, DefaultHost> hosts;
+
+ private EventuallyConsistentMapListener<HostId, DefaultHost> hostLocationTracker =
+ new HostLocationTracker();
+
+ @Activate
+ public void activate() {
+ KryoNamespace.Builder hostSerializer = KryoNamespace.newBuilder()
+ .register(KryoNamespaces.API);
+
+ hosts = storageService.<HostId, DefaultHost>eventuallyConsistentMapBuilder()
+ .withName("onos-hosts")
+ .withSerializer(hostSerializer)
+ .withTimestampProvider((k, v) -> clockService.getTimestamp())
+ .build();
+
+ hosts.addListener(hostLocationTracker);
+
+ log.info("Started");
+ }
+
+ @Deactivate
+ public void deactivate() {
+ hosts.removeListener(hostLocationTracker);
+ hosts.destroy();
+ locations.clear();
+
+ log.info("Stopped");
+ }
+
+ @Override
+ public HostEvent createOrUpdateHost(ProviderId providerId,
+ HostId hostId,
+ HostDescription hostDescription,
+ boolean replaceIPs) {
+ // TODO: We need a way to detect conflicting changes and abort update.
+ // (BOC) Compute might do this for us.
+
+ final AtomicReference<Type> eventType = new AtomicReference<>();
+ final AtomicReference<DefaultHost> oldHost = new AtomicReference<>();
+ DefaultHost host = hosts.compute(hostId, (id, existingHost) -> {
+ if (existingHost != null) {
+ oldHost.set(existingHost);
+ checkState(Objects.equals(hostDescription.hwAddress(), existingHost.mac()),
+ "Existing and new MAC addresses differ.");
+ checkState(Objects.equals(hostDescription.vlan(), existingHost.vlan()),
+ "Existing and new VLANs differ.");
+ }
+
+ // TODO do we ever want the existing location?
+ HostLocation location = hostDescription.location();
+
+ final Set<IpAddress> addresses;
+ if (existingHost == null || replaceIPs) {
+ addresses = ImmutableSet.copyOf(hostDescription.ipAddress());
+ } else {
+ addresses = Sets.newHashSet(existingHost.ipAddresses());
+ addresses.addAll(hostDescription.ipAddress());
+ }
+
+ final Annotations annotations;
+ if (existingHost != null) {
+ annotations = merge((DefaultAnnotations) existingHost.annotations(),
+ hostDescription.annotations());
+ } else {
+ annotations = hostDescription.annotations();
+ }
+
+ if (existingHost == null) {
+ eventType.set(HOST_ADDED);
+ } else if (!Objects.equals(existingHost.location(), hostDescription.location())) {
+ eventType.set(HOST_MOVED);
+ } else if (!existingHost.ipAddresses().containsAll(hostDescription.ipAddress()) ||
+ !hostDescription.annotations().keys().isEmpty()) {
+ eventType.set(HOST_UPDATED);
+ } // else, eventType == null; this means we don't send an event
+
+ return new DefaultHost(providerId,
+ hostId,
+ hostDescription.hwAddress(),
+ hostDescription.vlan(),
+ location,
+ addresses,
+ annotations);
+ });
+
+ if (oldHost.get() != null) {
+ DefaultHost old = oldHost.get();
+ locations.remove(old.location(), old);
+ }
+ locations.put(host.location(), host);
+
+ return eventType.get() != null ? new HostEvent(eventType.get(), host) : null;
+ }
+
+ @Override
+ public HostEvent removeHost(HostId hostId) {
+ Host host = hosts.remove(hostId);
+ return host != null ? new HostEvent(HOST_REMOVED, host) : null;
+ }
+
+ @Override
+ public int getHostCount() {
+ return hosts.size();
+ }
+
+ @Override
+ public Iterable<Host> getHosts() {
+ return ImmutableSet.copyOf(hosts.values());
+ }
+
+ @Override
+ public Host getHost(HostId hostId) {
+ return hosts.get(hostId);
+ }
+
+ @Override
+ public Set<Host> getHosts(VlanId vlanId) {
+ return filter(hosts.values(), host -> Objects.equals(host.vlan(), vlanId));
+ }
+
+ @Override
+ public Set<Host> getHosts(MacAddress mac) {
+ return filter(hosts.values(), host -> Objects.equals(host.mac(), mac));
+ }
+
+ @Override
+ public Set<Host> getHosts(IpAddress ip) {
+ return filter(hosts.values(), host -> host.ipAddresses().contains(ip));
+ }
+
+ @Override
+ public Set<Host> getConnectedHosts(ConnectPoint connectPoint) {
+ return ImmutableSet.copyOf(locations.get(connectPoint));
+ }
+
+ @Override
+ public Set<Host> getConnectedHosts(DeviceId deviceId) {
+ return ImmutableMultimap.copyOf(locations)
+ .entries()
+ .stream()
+ .filter(entry -> entry.getKey().deviceId().equals(deviceId))
+ .map(entry -> entry.getValue())
+ .collect(Collectors.toSet());
+ }
+
+ private Set<Host> filter(Collection<DefaultHost> collection, Predicate<DefaultHost> predicate) {
+ return collection.stream().filter(predicate).collect(Collectors.toSet());
+ }
+
+ private class HostLocationTracker implements EventuallyConsistentMapListener<HostId, DefaultHost> {
+ @Override
+ public void event(EventuallyConsistentMapEvent<HostId, DefaultHost> event) {
+ DefaultHost host = checkNotNull(event.value());
+ if (event.type() == PUT) {
+ boolean isNew = locations.put(host.location(), host);
+ notifyDelegate(new HostEvent(isNew ? HOST_ADDED : HOST_UPDATED, host));
+ } else if (event.type() == REMOVE) {
+ if (locations.remove(host.location(), host)) {
+ notifyDelegate(new HostEvent(HOST_REMOVED, host));
+ }
+
+ }
+ }
+ }
+}
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/impl/LogicalTimestamp.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/impl/LogicalTimestamp.java
index 5ae8b4f4..9382960f 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/impl/LogicalTimestamp.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/impl/LogicalTimestamp.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.store.impl;
import static com.google.common.base.Preconditions.checkArgument;
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/link/impl/ECLinkStore.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/link/impl/ECLinkStore.java
index 4577086c..243caf80 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/link/impl/ECLinkStore.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/link/impl/ECLinkStore.java
@@ -211,7 +211,10 @@ public class ECLinkStore
// otherwise signal the actual master.
if (clusterService.getLocalNode().id().equals(dstNodeId)) {
LinkKey linkKey = linkKey(linkDescription.src(), linkDescription.dst());
- Provided<LinkKey> internalLinkKey = new Provided<>(linkKey, providerId);
+ Provided<LinkKey> internalLinkKey = getProvided(linkKey, providerId);
+ if (internalLinkKey == null) {
+ return null;
+ }
linkDescriptions.compute(internalLinkKey, (k, v) -> createOrUpdateLinkInternal(v , linkDescription));
return refreshLinkCache(linkKey);
} else {
@@ -226,6 +229,18 @@ public class ECLinkStore
}
}
+ private Provided<LinkKey> getProvided(LinkKey linkKey, ProviderId provId) {
+ ProviderId bpid = getBaseProviderId(linkKey);
+ if (provId == null) {
+ // The LinkService didn't know who this LinkKey belongs to.
+ // A fix is to either modify the getProvider() in LinkService classes
+ // or expose the contents of linkDescriptions to the LinkService.
+ return (bpid == null) ? null : new Provided<>(linkKey, bpid);
+ } else {
+ return new Provided<>(linkKey, provId);
+ }
+ }
+
private LinkDescription createOrUpdateLinkInternal(LinkDescription current, LinkDescription updated) {
if (current != null) {
// we only allow transition from INDIRECT -> DIRECT
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/link/impl/GossipLinkStore.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/link/impl/GossipLinkStore.java
index 767ede54..105c77df 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/link/impl/GossipLinkStore.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/link/impl/GossipLinkStore.java
@@ -62,7 +62,6 @@ import org.onosproject.store.serializers.custom.DistributedStoreSerializers;
import org.slf4j.Logger;
import java.io.IOException;
-import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -551,7 +550,7 @@ public class GossipLinkStore
*/
private static <K, V> SetMultimap<K, V> createSynchronizedHashMultiMap() {
return synchronizedSetMultimap(
- Multimaps.newSetMultimap(new ConcurrentHashMap<K, Collection<V>>(),
+ Multimaps.newSetMultimap(new ConcurrentHashMap<>(),
() -> Sets.newConcurrentHashSet()));
}
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/link/impl/LinkInjectedEvent.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/link/impl/LinkInjectedEvent.java
index 356033b0..b353208d 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/link/impl/LinkInjectedEvent.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/link/impl/LinkInjectedEvent.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.store.link.impl;
import com.google.common.base.MoreObjects;
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/mastership/impl/RoleValue.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/mastership/impl/RoleValue.java
index 9d3b1686..5a38a34a 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/mastership/impl/RoleValue.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/mastership/impl/RoleValue.java
@@ -45,9 +45,9 @@ final class RoleValue {
* Constructs empty RoleValue.
*/
public RoleValue() {
- value.put(MastershipRole.MASTER, new LinkedList<NodeId>());
- value.put(MastershipRole.STANDBY, new LinkedList<NodeId>());
- value.put(MastershipRole.NONE, new LinkedList<NodeId>());
+ value.put(MastershipRole.MASTER, new LinkedList<>());
+ value.put(MastershipRole.STANDBY, new LinkedList<>());
+ value.put(MastershipRole.NONE, new LinkedList<>());
}
/**
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/packet/impl/DistributedPacketStore.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/packet/impl/DistributedPacketStore.java
index 24ce2155..d4c89c93 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/packet/impl/DistributedPacketStore.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/packet/impl/DistributedPacketStore.java
@@ -15,7 +15,7 @@
*/
package org.onosproject.store.packet.impl;
-import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -45,6 +45,7 @@ import org.onosproject.store.service.Versioned;
import org.slf4j.Logger;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -152,7 +153,7 @@ public class DistributedPacketStore
}
@Override
- public Set<PacketRequest> existingRequests() {
+ public List<PacketRequest> existingRequests() {
return tracker.requests();
}
@@ -197,10 +198,11 @@ public class DistributedPacketStore
return requests.replace(request.selector(), old.version(), newSet);
}
- public Set<PacketRequest> requests() {
- ImmutableSet.Builder<PacketRequest> builder = ImmutableSet.builder();
- requests.values().forEach(v -> builder.addAll(v.value()));
- return builder.build();
+ public List<PacketRequest> requests() {
+ List<PacketRequest> list = Lists.newArrayList();
+ requests.values().forEach(v -> list.addAll(v.value()));
+ list.sort((o1, o2) -> o1.priority().priorityValue() - o2.priority().priorityValue());
+ return list;
}
}
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/proxyarp/impl/package-info.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/proxyarp/impl/package-info.java
new file mode 100644
index 00000000..e3675524
--- /dev/null
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/proxyarp/impl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Implementation of proxy ARP distribution mechanism.
+ */
+package org.onosproject.store.proxyarp.impl;
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentLinkResourceStore.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentLinkResourceStore.java
index ce25f868..3a296353 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentLinkResourceStore.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentLinkResourceStore.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.store.resource.impl;
import java.util.ArrayList;
diff --git a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/statistic/impl/DistributedStatisticStore.java b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/statistic/impl/DistributedStatisticStore.java
index d5434730..35bdad14 100644
--- a/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/statistic/impl/DistributedStatisticStore.java
+++ b/framework/src/onos/core/store/dist/src/main/java/org/onosproject/store/statistic/impl/DistributedStatisticStore.java
@@ -97,7 +97,7 @@ public class DistributedStatisticStore implements StatisticStore {
// register this store specific classes here
.build();
}
- };;
+ };
private ExecutorService messageHandlingExecutor;
diff --git a/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/cluster/messaging/impl/ClusterCommunicationManagerTest.java b/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/cluster/messaging/impl/ClusterCommunicationManagerTest.java
index 0dcc6a10..daeaa12c 100644
--- a/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/cluster/messaging/impl/ClusterCommunicationManagerTest.java
+++ b/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/cluster/messaging/impl/ClusterCommunicationManagerTest.java
@@ -109,7 +109,7 @@ public class ClusterCommunicationManagerTest {
assertEquals("incorrect event node", nodeId, delegate.nodeId);
}
- enum Op { DETECTED, VANISHED, REMOVED };
+ enum Op { DETECTED, VANISHED, REMOVED }
private class TestDelegate implements ClusterNodesDelegate {
diff --git a/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/MatchTest.java b/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/MatchTest.java
index 7ff94c88..952393aa 100644
--- a/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/MatchTest.java
+++ b/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/MatchTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.store.consistent.impl;
import static junit.framework.TestCase.assertEquals;
diff --git a/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/ResultTest.java b/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/ResultTest.java
index 2a3bab87..2d329d14 100644
--- a/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/ResultTest.java
+++ b/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/ResultTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.store.consistent.impl;
import static junit.framework.TestCase.assertEquals;
diff --git a/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/UpdateResultTest.java b/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/UpdateResultTest.java
index 84dc9153..ab53710b 100644
--- a/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/UpdateResultTest.java
+++ b/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/UpdateResultTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.store.consistent.impl;
import static junit.framework.TestCase.assertEquals;
@@ -15,8 +30,8 @@ public class UpdateResultTest {
@Test
public void testGetters() {
- Versioned<String> oldValue = new Versioned<String>("a", 1);
- Versioned<String> newValue = new Versioned<String>("b", 2);
+ Versioned<String> oldValue = new Versioned<>("a", 1);
+ Versioned<String> newValue = new Versioned<>("b", 2);
UpdateResult<String, String> ur =
new UpdateResult<>(true, "foo", "k", oldValue, newValue);
@@ -29,8 +44,8 @@ public class UpdateResultTest {
@Test
public void testToMapEvent() {
- Versioned<String> oldValue = new Versioned<String>("a", 1);
- Versioned<String> newValue = new Versioned<String>("b", 2);
+ Versioned<String> oldValue = new Versioned<>("a", 1);
+ Versioned<String> newValue = new Versioned<>("b", 2);
UpdateResult<String, String> ur1 =
new UpdateResult<>(true, "foo", "k", oldValue, newValue);
MapEvent<String, String> event1 = ur1.toMapEvent();
@@ -59,8 +74,8 @@ public class UpdateResultTest {
@Test
public void testMap() {
- Versioned<String> oldValue = new Versioned<String>("a", 1);
- Versioned<String> newValue = new Versioned<String>("b", 2);
+ Versioned<String> oldValue = new Versioned<>("a", 1);
+ Versioned<String> newValue = new Versioned<>("b", 2);
UpdateResult<String, String> ur1 =
new UpdateResult<>(true, "foo", "k", oldValue, newValue);
UpdateResult<Integer, Integer> ur2 = ur1.map(s -> s.length(), s -> s.length());
diff --git a/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/device/impl/GossipDeviceStoreTest.java b/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/device/impl/GossipDeviceStoreTest.java
index 43b11f52..3a168936 100644
--- a/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/device/impl/GossipDeviceStoreTest.java
+++ b/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/device/impl/GossipDeviceStoreTest.java
@@ -802,31 +802,22 @@ public class GossipDeviceStoreTest {
@Test
public final void testEvents() throws InterruptedException {
final CountDownLatch addLatch = new CountDownLatch(1);
- DeviceStoreDelegate checkAdd = new DeviceStoreDelegate() {
- @Override
- public void notify(DeviceEvent event) {
- assertEquals(DEVICE_ADDED, event.type());
- assertDevice(DID1, SW1, event.subject());
- addLatch.countDown();
- }
+ DeviceStoreDelegate checkAdd = event -> {
+ assertEquals(DEVICE_ADDED, event.type());
+ assertDevice(DID1, SW1, event.subject());
+ addLatch.countDown();
};
final CountDownLatch updateLatch = new CountDownLatch(1);
- DeviceStoreDelegate checkUpdate = new DeviceStoreDelegate() {
- @Override
- public void notify(DeviceEvent event) {
- assertEquals(DEVICE_UPDATED, event.type());
- assertDevice(DID1, SW2, event.subject());
- updateLatch.countDown();
- }
+ DeviceStoreDelegate checkUpdate = event -> {
+ assertEquals(DEVICE_UPDATED, event.type());
+ assertDevice(DID1, SW2, event.subject());
+ updateLatch.countDown();
};
final CountDownLatch removeLatch = new CountDownLatch(1);
- DeviceStoreDelegate checkRemove = new DeviceStoreDelegate() {
- @Override
- public void notify(DeviceEvent event) {
- assertEquals(DEVICE_REMOVED, event.type());
- assertDevice(DID1, SW2, event.subject());
- removeLatch.countDown();
- }
+ DeviceStoreDelegate checkRemove = event -> {
+ assertEquals(DEVICE_REMOVED, event.type());
+ assertDevice(DID1, SW2, event.subject());
+ removeLatch.countDown();
};
DeviceDescription description =
diff --git a/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/flow/impl/ReplicaInfoManagerTest.java b/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/flow/impl/ReplicaInfoManagerTest.java
index d429752c..76ff8045 100644
--- a/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/flow/impl/ReplicaInfoManagerTest.java
+++ b/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/flow/impl/ReplicaInfoManagerTest.java
@@ -101,7 +101,7 @@ public class ReplicaInfoManagerTest {
// fake MastershipEvent
eventDispatcher.post(new MastershipEvent(Type.MASTER_CHANGED, DID1,
- new RoleInfo(NID1, new LinkedList<NodeId>())));
+ new RoleInfo(NID1, new LinkedList<>())));
assertTrue(latch.await(1, TimeUnit.SECONDS));
}
diff --git a/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/impl/TimestampedTest.java b/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/impl/TimestampedTest.java
index 0f67572f..c47eb27a 100644
--- a/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/impl/TimestampedTest.java
+++ b/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/impl/TimestampedTest.java
@@ -65,7 +65,7 @@ public class TimestampedTest {
@Test
public final void testValue() {
- final Integer n = Integer.valueOf(42);
+ final Integer n = 42;
Timestamped<Integer> tsv = new Timestamped<>(n, TS_1_1);
assertSame(n, tsv.value());
diff --git a/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/link/impl/GossipLinkStoreTest.java b/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/link/impl/GossipLinkStoreTest.java
index bf7af464..f8b5b860 100644
--- a/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/link/impl/GossipLinkStoreTest.java
+++ b/framework/src/onos/core/store/dist/src/test/java/org/onosproject/store/link/impl/GossipLinkStoreTest.java
@@ -548,31 +548,22 @@ public class GossipLinkStoreTest {
final LinkKey linkId1 = LinkKey.linkKey(d1P1, d2P2);
final CountDownLatch addLatch = new CountDownLatch(1);
- LinkStoreDelegate checkAdd = new LinkStoreDelegate() {
- @Override
- public void notify(LinkEvent event) {
- assertEquals(LINK_ADDED, event.type());
- assertLink(linkId1, INDIRECT, event.subject());
- addLatch.countDown();
- }
+ LinkStoreDelegate checkAdd = event -> {
+ assertEquals(LINK_ADDED, event.type());
+ assertLink(linkId1, INDIRECT, event.subject());
+ addLatch.countDown();
};
final CountDownLatch updateLatch = new CountDownLatch(1);
- LinkStoreDelegate checkUpdate = new LinkStoreDelegate() {
- @Override
- public void notify(LinkEvent event) {
- assertEquals(LINK_UPDATED, event.type());
- assertLink(linkId1, DIRECT, event.subject());
- updateLatch.countDown();
- }
+ LinkStoreDelegate checkUpdate = event -> {
+ assertEquals(LINK_UPDATED, event.type());
+ assertLink(linkId1, DIRECT, event.subject());
+ updateLatch.countDown();
};
final CountDownLatch removeLatch = new CountDownLatch(1);
- LinkStoreDelegate checkRemove = new LinkStoreDelegate() {
- @Override
- public void notify(LinkEvent event) {
- assertEquals(LINK_REMOVED, event.type());
- assertLink(linkId1, DIRECT, event.subject());
- removeLatch.countDown();
- }
+ LinkStoreDelegate checkRemove = event -> {
+ assertEquals(LINK_REMOVED, event.type());
+ assertLink(linkId1, DIRECT, event.subject());
+ removeLatch.countDown();
};
linkStore.setDelegate(checkAdd);
diff --git a/framework/src/onos/core/store/pom.xml b/framework/src/onos/core/store/pom.xml
index 59d66642..2b246b83 100644
--- a/framework/src/onos/core/store/pom.xml
+++ b/framework/src/onos/core/store/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-core</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/core/store/serializers/pom.xml b/framework/src/onos/core/store/serializers/pom.xml
index d869f60c..867ce0f0 100644
--- a/framework/src/onos/core/store/serializers/pom.xml
+++ b/framework/src/onos/core/store/serializers/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-core-store</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/core/store/serializers/src/main/java/org/onosproject/store/serializers/AnnotationsSerializer.java b/framework/src/onos/core/store/serializers/src/main/java/org/onosproject/store/serializers/AnnotationsSerializer.java
index febb4adb..ed02c3e3 100644
--- a/framework/src/onos/core/store/serializers/src/main/java/org/onosproject/store/serializers/AnnotationsSerializer.java
+++ b/framework/src/onos/core/store/serializers/src/main/java/org/onosproject/store/serializers/AnnotationsSerializer.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.store.serializers;
import org.onosproject.net.DefaultAnnotations;
diff --git a/framework/src/onos/docs/external.xml b/framework/src/onos/docs/external.xml
index 1f020548..69ac0577 100644
--- a/framework/src/onos/docs/external.xml
+++ b/framework/src/onos/docs/external.xml
@@ -26,7 +26,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@@ -51,7 +51,7 @@
<show>package</show>
<excludePackageNames>@external-excludes</excludePackageNames>
<docfilessubdirs>true</docfilessubdirs>
- <doctitle>ONOS Java API (1.3.0-SNAPSHOT)</doctitle>
+ <doctitle>ONOS Java API (1.4.0-SNAPSHOT)</doctitle>
<groups>
<group>
<title>Network Model &amp; Services</title>
diff --git a/framework/src/onos/docs/internal-apis b/framework/src/onos/docs/internal-apis
index 9d8079a5..a35d093c 100644
--- a/framework/src/onos/docs/internal-apis
+++ b/framework/src/onos/docs/internal-apis
@@ -1,4 +1,2 @@
org.onosproject
org.onosproject.*
-org.onosproject.rest
-org.onosproject.security
diff --git a/framework/src/onos/docs/internal-core b/framework/src/onos/docs/internal-core
index 8f242822..f987aa94 100644
--- a/framework/src/onos/docs/internal-core
+++ b/framework/src/onos/docs/internal-core
@@ -1,7 +1,28 @@
-*.impl
-*.impl.*
-
+org.onosproject.cfg.impl
+org.onosproject.cluster.impl
+org.onosproject.core.impl
+org.onosproject.event.impl
+org.onosproject.net.config.impl
+org.onosproject.net.device.impl
+org.onosproject.net.driver.impl
+org.onosproject.net.edgeservice.impl
+org.onosproject.net.flow.impl
+org.onosproject.net.flowobjective.impl
+org.onosproject.net.flowobjective.impl.composition
+org.onosproject.net.group.impl
+org.onosproject.net.host.impl
+org.onosproject.net.intent.impl
+org.onosproject.net.intent.impl.compiler
+org.onosproject.net.intent.impl.phase
+org.onosproject.net.link.impl
+org.onosproject.net.newresource.impl
+org.onosproject.net.packet.impl
+org.onosproject.net.proxyarp.impl
+org.onosproject.net.resource.impl
+org.onosproject.net.statistic.impl
+org.onosproject.net.topology.impl
org.onosproject.json
org.onosproject.json.*
-:org.onosproject.common.*
-org.onosproject.security.*
+org.onosproject.common.*
+org.onosproject.security.impl
+org.onosproject.security.store
diff --git a/framework/src/onos/docs/internal-incubator b/framework/src/onos/docs/internal-incubator
index 619bbb90..58179b68 100644
--- a/framework/src/onos/docs/internal-incubator
+++ b/framework/src/onos/docs/internal-incubator
@@ -7,3 +7,7 @@ org.onosproject.incubator.store.tunnel.impl
org.onosproject.incubator.net.config.impl
org.onosproject.incubator.net.domain.impl
org.onosproject.incubator.store.config.impl
+org.onosproject.incubator.net.intf.impl
+org.onosproject.incubator.net.meter.impl
+org.onosproject.incubator.net.resource.label
+org.onosproject.incubator.store.meter.impl \ No newline at end of file
diff --git a/framework/src/onos/docs/internal.xml b/framework/src/onos/docs/internal.xml
index bcb1215d..de9c1c64 100644
--- a/framework/src/onos/docs/internal.xml
+++ b/framework/src/onos/docs/internal.xml
@@ -26,7 +26,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@@ -50,7 +50,7 @@
<configuration>
<show>package</show>
<docfilessubdirs>true</docfilessubdirs>
- <doctitle>ONOS Java API (1.3.0-SNAPSHOT)</doctitle>
+ <doctitle>ONOS Java API (1.4.0-SNAPSHOT)</doctitle>
<excludePackageNames>@internal-excludes</excludePackageNames>
<groups>
<group>
diff --git a/framework/src/onos/drivers/pom.xml b/framework/src/onos/drivers/pom.xml
index b86e2bc2..749a68c4 100644
--- a/framework/src/onos/drivers/pom.xml
+++ b/framework/src/onos/drivers/pom.xml
@@ -23,7 +23,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@@ -55,7 +55,7 @@
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-core-serializers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
diff --git a/framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/CentecV350Pipeline.java b/framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/CentecV350Pipeline.java
index ed9794c0..cd7a1b66 100644
--- a/framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/CentecV350Pipeline.java
+++ b/framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/CentecV350Pipeline.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.driver.pipeline;
diff --git a/framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/CorsaPipeline.java b/framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/CorsaPipeline.java
index 0c957319..ccf73079 100644
--- a/framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/CorsaPipeline.java
+++ b/framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/CorsaPipeline.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.driver.pipeline;
import static org.slf4j.LoggerFactory.getLogger;
diff --git a/framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/CpqdOFDPA1Pipeline.java b/framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/CpqdOFDPA1Pipeline.java
index b338719c..f72bde09 100644
--- a/framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/CpqdOFDPA1Pipeline.java
+++ b/framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/CpqdOFDPA1Pipeline.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.driver.pipeline;
import static org.slf4j.LoggerFactory.getLogger;
diff --git a/framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/SoftRouterPipeline.java b/framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/SoftRouterPipeline.java
index 220be864..23ef5f2b 100644
--- a/framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/SoftRouterPipeline.java
+++ b/framework/src/onos/drivers/src/main/java/org/onosproject/driver/pipeline/SoftRouterPipeline.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.driver.pipeline;
import static org.slf4j.LoggerFactory.getLogger;
diff --git a/framework/src/onos/features/pom.xml b/framework/src/onos/features/pom.xml
index c4a22b60..7b362791 100644
--- a/framework/src/onos/features/pom.xml
+++ b/framework/src/onos/features/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/incubator/api/pom.xml b/framework/src/onos/incubator/api/pom.xml
index b417af53..9d7c7a6b 100644
--- a/framework/src/onos/incubator/api/pom.xml
+++ b/framework/src/onos/incubator/api/pom.xml
@@ -24,7 +24,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-incubator</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/ConfigException.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/ConfigException.java
index 071be6a0..deeac765 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/ConfigException.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/ConfigException.java
@@ -16,9 +16,12 @@
package org.onosproject.incubator.net.config.basics;
+import com.google.common.annotations.Beta;
+
/**
* Signals that an error was encountered while reading/writing configuration.
*/
+@Beta
public class ConfigException extends Exception {
/**
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/ExtraSubjectFactories.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/ExtraSubjectFactories.java
index 474ef6ad..260d0af4 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/ExtraSubjectFactories.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/ExtraSubjectFactories.java
@@ -15,12 +15,14 @@
*/
package org.onosproject.incubator.net.config.basics;
+import com.google.common.annotations.Beta;
import org.onosproject.incubator.net.domain.IntentDomainId;
import org.onosproject.net.config.SubjectFactory;
/**
* Set of subject factories for potential configuration subjects.
*/
+@Beta
public final class ExtraSubjectFactories {
// Construction forbidden
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/InterfaceConfig.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/InterfaceConfig.java
index 47adf5c7..af2b47d8 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/InterfaceConfig.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/InterfaceConfig.java
@@ -17,6 +17,7 @@
package org.onosproject.incubator.net.config.basics;
import com.fasterxml.jackson.databind.JsonNode;
+import com.google.common.annotations.Beta;
import com.google.common.collect.Sets;
import org.onlab.packet.MacAddress;
import org.onlab.packet.VlanId;
@@ -30,6 +31,7 @@ import java.util.Set;
/**
* Configuration for interfaces.
*/
+@Beta
public class InterfaceConfig extends Config<ConnectPoint> {
public static final String IPS = "ips";
public static final String MAC = "mac";
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/domain/TunnelPrimitive.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/domain/TunnelPrimitive.java
index 975708d6..2abaab5f 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/domain/TunnelPrimitive.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/domain/TunnelPrimitive.java
@@ -15,12 +15,14 @@
*/
package org.onosproject.incubator.net.domain;
+import com.google.common.annotations.Beta;
import org.onosproject.core.ApplicationId;
import org.onosproject.net.ConnectPoint;
/**
* Provides connectivity through a domain.
*/
+@Beta
public class TunnelPrimitive extends IntentPrimitive {
private final ConnectPoint one;
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/intf/Interface.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/intf/Interface.java
index 15ecf340..69d14bce 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/intf/Interface.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/intf/Interface.java
@@ -15,6 +15,7 @@
*/
package org.onosproject.incubator.net.intf;
+import com.google.common.annotations.Beta;
import com.google.common.base.MoreObjects;
import com.google.common.collect.Sets;
import org.onlab.packet.MacAddress;
@@ -31,6 +32,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
* An Interface maps network configuration information (such as addresses and
* vlans) to a port in the network.
*/
+@Beta
public class Interface {
private final ConnectPoint connectPoint;
private final Set<InterfaceIpAddress> ipAddresses;
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/intf/InterfaceService.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/intf/InterfaceService.java
index ad1bf34a..b164df93 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/intf/InterfaceService.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/intf/InterfaceService.java
@@ -16,6 +16,7 @@
package org.onosproject.incubator.net.intf;
+import com.google.common.annotations.Beta;
import org.onlab.packet.IpAddress;
import org.onlab.packet.VlanId;
import org.onosproject.net.ConnectPoint;
@@ -25,6 +26,7 @@ import java.util.Set;
/**
* Service for interacting with interfaces.
*/
+@Beta
public interface InterfaceService {
/**
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/DefaultLabelResource.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/DefaultLabelResource.java
index 23663d38..1065503a 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/DefaultLabelResource.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/DefaultLabelResource.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label;
import java.util.Objects;
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResource.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResource.java
index bb1b3167..6d5a90be 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResource.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResource.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label;
import com.google.common.annotations.Beta;
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceAdminService.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceAdminService.java
index f20ab59b..a6108bb6 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceAdminService.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceAdminService.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label;
import com.google.common.annotations.Beta;
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceDelegate.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceDelegate.java
index ea053afc..ae88be57 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceDelegate.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceDelegate.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label;
import com.google.common.annotations.Beta;
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceEvent.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceEvent.java
index e77fdaf5..dd02ae21 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceEvent.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceEvent.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label;
import com.google.common.annotations.Beta;
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceId.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceId.java
index 8936954a..6fe7067d 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceId.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceId.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label;
import com.google.common.annotations.Beta;
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceListener.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceListener.java
index 72de0fb4..b7f907c6 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceListener.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceListener.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label;
import com.google.common.annotations.Beta;
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourcePool.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourcePool.java
index 315abe61..75916af0 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourcePool.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourcePool.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label;
import static com.google.common.base.Preconditions.checkArgument;
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceProvider.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceProvider.java
index 2ef966b6..821177a7 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceProvider.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceProvider.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label;
import com.google.common.annotations.Beta;
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceProviderRegistry.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceProviderRegistry.java
index b8e0a299..e6234974 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceProviderRegistry.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceProviderRegistry.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label;
import com.google.common.annotations.Beta;
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceProviderService.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceProviderService.java
index 93384c04..9a1472d6 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceProviderService.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceProviderService.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label;
import com.google.common.annotations.Beta;
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceRequest.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceRequest.java
index d81d7aa8..9ff6a587 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceRequest.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceRequest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label;
import java.util.Collection;
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceService.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceService.java
index 02052c37..bb86d475 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceService.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceService.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label;
import java.util.Collection;
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceStore.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceStore.java
index 2da3e814..5322d013 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceStore.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceStore.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label;
import java.util.Collection;
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/DefaultTunnelStatistics.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/DefaultTunnelStatistics.java
index 6358ca92..cab9ae43 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/DefaultTunnelStatistics.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/DefaultTunnelStatistics.java
@@ -1,29 +1,30 @@
/*
+ * Copyright 2015 Open Networking Laboratory
*
- * * Copyright 2015 Open Networking Laboratory
- * *
- * * 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.
+ * 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.onosproject.incubator.net.tunnel;
+import com.google.common.annotations.Beta;
+
import java.time.Duration;
import java.util.List;
/**
* Default implementation of immutable tunnel statistics.
*/
+@Beta
public final class DefaultTunnelStatistics implements TunnelStatistics {
private final TunnelId tunnelId;
private final double bwUtilization;
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelEndPointFormatter.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelEndPointFormatter.java
index 964d451a..57af670c 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelEndPointFormatter.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelEndPointFormatter.java
@@ -1,6 +1,22 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.tunnel;
+import com.google.common.annotations.Beta;
import org.onosproject.ui.table.CellFormatter;
import org.onosproject.ui.table.cell.AbstractCellFormatter;
@@ -8,6 +24,7 @@ import org.onosproject.ui.table.cell.AbstractCellFormatter;
* Formats a optical tunnel endpoint as "(type)/(element-id)/(port)".
* Formats a ip tunnel endpoint as "ip".
*/
+@Beta
public final class TunnelEndPointFormatter extends AbstractCellFormatter {
//non-instantiable
private TunnelEndPointFormatter() {
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelStatistics.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelStatistics.java
index 650f9941..c7c9fd96 100644
--- a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelStatistics.java
+++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelStatistics.java
@@ -1,29 +1,30 @@
/*
+ * Copyright 2015 Open Networking Laboratory
*
- * * Copyright 2015 Open Networking Laboratory
- * *
- * * 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.
+ * 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.onosproject.incubator.net.tunnel;
+import com.google.common.annotations.Beta;
+
import java.time.Duration;
import java.util.List;
/**
* Statistics of a tunnel.
*/
+@Beta
public interface TunnelStatistics {
/**
diff --git a/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/config/basics/OpticalPortConfigTest.java b/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/config/basics/OpticalPortConfigTest.java
index 9d56ca23..f2b15b09 100644
--- a/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/config/basics/OpticalPortConfigTest.java
+++ b/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/config/basics/OpticalPortConfigTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.config.basics;
import static org.junit.Assert.assertEquals;
diff --git a/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/resource/label/DefaultLabelResourceTest.java b/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/resource/label/DefaultLabelResourceTest.java
index 5d7c02fc..1055dbad 100644
--- a/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/resource/label/DefaultLabelResourceTest.java
+++ b/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/resource/label/DefaultLabelResourceTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label;
import org.junit.Test;
diff --git a/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/resource/label/LabelResourcePoolTest.java b/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/resource/label/LabelResourcePoolTest.java
index 87835080..25ef57f7 100644
--- a/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/resource/label/LabelResourcePoolTest.java
+++ b/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/resource/label/LabelResourcePoolTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label;
import org.junit.Test;
diff --git a/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/resource/label/LabelResourceRequestTest.java b/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/resource/label/LabelResourceRequestTest.java
index 1b08f7c0..f41ad289 100644
--- a/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/resource/label/LabelResourceRequestTest.java
+++ b/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/resource/label/LabelResourceRequestTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label;
import java.util.Collections;
diff --git a/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/DefaultTunnelTest.java b/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/DefaultTunnelTest.java
index ae94991f..25ec73d4 100644
--- a/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/DefaultTunnelTest.java
+++ b/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/DefaultTunnelTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.tunnel;
import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
diff --git a/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelEventTest.java b/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelEventTest.java
index a58e10b5..28669a21 100644
--- a/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelEventTest.java
+++ b/framework/src/onos/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelEventTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.tunnel;
import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/framework/src/onos/incubator/net/pom.xml b/framework/src/onos/incubator/net/pom.xml
index a0b5391d..e60a2710 100644
--- a/framework/src/onos/incubator/net/pom.xml
+++ b/framework/src/onos/incubator/net/pom.xml
@@ -23,7 +23,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-incubator</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/incubator/net/src/main/java/org/onosproject/incubator/net/intf/impl/package-info.java b/framework/src/onos/incubator/net/src/main/java/org/onosproject/incubator/net/intf/impl/package-info.java
new file mode 100644
index 00000000..abdce5a4
--- /dev/null
+++ b/framework/src/onos/incubator/net/src/main/java/org/onosproject/incubator/net/intf/impl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Implementation of service for interacting with interfaces.
+ */
+package org.onosproject.incubator.net.intf.impl;
diff --git a/framework/src/onos/incubator/net/src/main/java/org/onosproject/incubator/net/intf/package-info.java b/framework/src/onos/incubator/net/src/main/java/org/onosproject/incubator/net/intf/package-info.java
new file mode 100644
index 00000000..00f42ead
--- /dev/null
+++ b/framework/src/onos/incubator/net/src/main/java/org/onosproject/incubator/net/intf/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Service for interacting with interfaces.
+ */
+package org.onosproject.incubator.net.intf;
diff --git a/framework/src/onos/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/package-info.java b/framework/src/onos/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/package-info.java
new file mode 100644
index 00000000..5559d90b
--- /dev/null
+++ b/framework/src/onos/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Provides implementation of the meter service APIs.
+ */
+package org.onosproject.incubator.net.meter.impl;
diff --git a/framework/src/onos/incubator/net/src/main/java/org/onosproject/incubator/net/resource/label/impl/LabelResourceManager.java b/framework/src/onos/incubator/net/src/main/java/org/onosproject/incubator/net/resource/label/impl/LabelResourceManager.java
index 56167c48..8ecf1d29 100644
--- a/framework/src/onos/incubator/net/src/main/java/org/onosproject/incubator/net/resource/label/impl/LabelResourceManager.java
+++ b/framework/src/onos/incubator/net/src/main/java/org/onosproject/incubator/net/resource/label/impl/LabelResourceManager.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.resource.label.impl;
import com.google.common.collect.Multimap;
diff --git a/framework/src/onos/incubator/net/src/test/java/org/onosproject/incubator/net/intf/impl/InterfaceManagerTest.java b/framework/src/onos/incubator/net/src/test/java/org/onosproject/incubator/net/intf/impl/InterfaceManagerTest.java
new file mode 100644
index 00000000..cc2908bc
--- /dev/null
+++ b/framework/src/onos/incubator/net/src/test/java/org/onosproject/incubator/net/intf/impl/InterfaceManagerTest.java
@@ -0,0 +1,287 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.net.intf.impl;
+
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import org.junit.Before;
+import org.junit.Test;
+import org.onlab.packet.Ip4Address;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
+import org.onosproject.incubator.net.config.basics.ConfigException;
+import org.onosproject.incubator.net.config.basics.InterfaceConfig;
+import org.onosproject.incubator.net.intf.Interface;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.config.Config;
+import org.onosproject.net.config.NetworkConfigEvent;
+import org.onosproject.net.config.NetworkConfigListener;
+import org.onosproject.net.config.NetworkConfigServiceAdapter;
+import org.onosproject.net.host.InterfaceIpAddress;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
+import static junit.framework.TestCase.assertEquals;
+import static org.junit.Assert.assertNull;
+
+/**
+ * Unit tests for InterfaceManager.
+ */
+public class InterfaceManagerTest {
+ private static final Class<InterfaceConfig> CONFIG_CLASS = InterfaceConfig.class;
+
+ private static final int NUM_INTERFACES = 4;
+
+ private Set<ConnectPoint> subjects = Sets.newHashSet();
+ private Map<ConnectPoint, InterfaceConfig> configs = Maps.newHashMap();
+
+ private Set<Interface> interfaces = Sets.newHashSet();
+
+ private NetworkConfigListener listener;
+
+ private InterfaceManager interfaceManager;
+
+ @Before
+ public void setUp() throws Exception {
+ for (int i = 0; i < NUM_INTERFACES; i++) {
+ ConnectPoint cp = createConnectPoint(i);
+ subjects.add(cp);
+
+ Interface intf = createInterface(i);
+
+ interfaces.add(intf);
+
+ InterfaceConfig ic = new TestInterfaceConfig(cp, Sets.newHashSet(intf));
+
+ configs.put(cp, ic);
+ }
+
+ TestNetworkConfigService configService =
+ new TestNetworkConfigService(subjects, configs);
+
+ interfaceManager = new InterfaceManager();
+ interfaceManager.configService = configService;
+ interfaceManager.activate();
+ }
+
+ private Interface createInterface(int i) {
+ ConnectPoint cp = createConnectPoint(i);
+
+ InterfaceIpAddress ia = InterfaceIpAddress.valueOf("192.168." + i + ".1/24");
+
+ Interface intf = new Interface(cp,
+ Sets.newHashSet(ia),
+ MacAddress.valueOf(i),
+ VlanId.vlanId((short) i));
+
+ return intf;
+ }
+
+ private ConnectPoint createConnectPoint(int i) {
+ return ConnectPoint.deviceConnectPoint("of:000000000000000" + i + "/1");
+ }
+
+ @Test
+ public void testGetInterfaces() throws Exception {
+ assertEquals(interfaces, interfaceManager.getInterfaces());
+ }
+
+ @Test
+ public void testGetInterfacesByPort() throws Exception {
+ ConnectPoint cp = ConnectPoint.deviceConnectPoint("of:0000000000000001/1");
+
+ Set<Interface> byPort = Collections.singleton(createInterface(1));
+
+ assertEquals(byPort, interfaceManager.getInterfacesByPort(cp));
+ }
+
+ @Test
+ public void testGetInterfacesByIp() throws Exception {
+ IpAddress ip = Ip4Address.valueOf("192.168.2.1");
+
+ Set<Interface> byIp = Collections.singleton(createInterface(2));
+
+ assertEquals(byIp, interfaceManager.getInterfacesByIp(ip));
+ }
+
+ @Test
+ public void testGetMatchingInterface() throws Exception {
+ IpAddress ip = Ip4Address.valueOf("192.168.1.100");
+
+ Interface matchingIntf = createInterface(1);
+
+ assertEquals(matchingIntf, interfaceManager.getMatchingInterface(ip));
+
+ // Searching for an IP with no match should return null
+ ip = Ip4Address.valueOf("1.1.1.1");
+
+ assertNull(interfaceManager.getMatchingInterface(ip));
+ }
+
+ @Test
+ public void testGetInterfacesByVlan() throws Exception {
+ VlanId vlanId = VlanId.vlanId((short) 1);
+
+ Set<Interface> byVlan = Collections.singleton(createInterface(1));
+
+ assertEquals(byVlan, interfaceManager.getInterfacesByVlan(vlanId));
+ }
+
+ @Test
+ public void testAddInterface() throws Exception {
+ // Create a new InterfaceConfig which will get added
+ VlanId vlanId = VlanId.vlanId((short) 1);
+ ConnectPoint cp = ConnectPoint.deviceConnectPoint("of:0000000000000001/2");
+ Interface newIntf = new Interface(cp,
+ Collections.emptySet(),
+ MacAddress.valueOf(100),
+ vlanId);
+
+ InterfaceConfig ic = new TestInterfaceConfig(cp, Collections.singleton(newIntf));
+
+ subjects.add(cp);
+ configs.put(cp, ic);
+ interfaces.add(newIntf);
+
+ NetworkConfigEvent event = new NetworkConfigEvent(
+ NetworkConfigEvent.Type.CONFIG_ADDED, cp, CONFIG_CLASS);
+
+ assertEquals(NUM_INTERFACES, interfaceManager.getInterfaces().size());
+
+ // Send in a config event containing a new interface config
+ listener.event(event);
+
+ // Check the new interface exists in the InterfaceManager's inventory
+ assertEquals(interfaces, interfaceManager.getInterfaces());
+ assertEquals(NUM_INTERFACES + 1, interfaceManager.getInterfaces().size());
+
+ // There are now two interfaces with vlan ID 1
+ Set<Interface> byVlan = Sets.newHashSet(createInterface(1), newIntf);
+ assertEquals(byVlan, interfaceManager.getInterfacesByVlan(vlanId));
+ }
+
+ @Test
+ public void testUpdateInterface() throws Exception {
+ ConnectPoint cp = createConnectPoint(1);
+
+ // Create an interface that is the same as the existing one, but adds a
+ // new IP address
+ Interface intf = createInterface(1);
+ Set<InterfaceIpAddress> addresses = Sets.newHashSet(intf.ipAddresses());
+ addresses.add(InterfaceIpAddress.valueOf("192.168.100.1/24"));
+ intf = new Interface(intf.connectPoint(), addresses, intf.mac(), intf.vlan());
+
+ // Create a new interface on the same connect point as the existing one
+ InterfaceIpAddress newAddr = InterfaceIpAddress.valueOf("192.168.101.1/24");
+ Interface newIntf = new Interface(cp,
+ Collections.singleton(newAddr),
+ MacAddress.valueOf(101),
+ VlanId.vlanId((short) 101));
+
+ Set<Interface> interfaces = Sets.newHashSet(intf, newIntf);
+
+ // New interface config updates the existing interface and adds a new
+ // interface to the same connect point
+ InterfaceConfig ic = new TestInterfaceConfig(cp, interfaces);
+
+ configs.put(cp, ic);
+
+ NetworkConfigEvent event = new NetworkConfigEvent(
+ NetworkConfigEvent.Type.CONFIG_UPDATED, cp, CONFIG_CLASS);
+
+ // Send in the event signalling the interfaces for this connect point
+ // have been updated
+ listener.event(event);
+
+ assertEquals(NUM_INTERFACES + 1, interfaceManager.getInterfaces().size());
+ assertEquals(interfaces, interfaceManager.getInterfacesByPort(cp));
+ }
+
+ @Test
+ public void testRemoveInterface() throws Exception {
+ ConnectPoint cp = createConnectPoint(1);
+
+ NetworkConfigEvent event = new NetworkConfigEvent(
+ NetworkConfigEvent.Type.CONFIG_REMOVED, cp, CONFIG_CLASS);
+
+ assertEquals(NUM_INTERFACES, interfaceManager.getInterfaces().size());
+
+ // Send in a config event removing an interface config
+ listener.event(event);
+
+ assertEquals(NUM_INTERFACES - 1, interfaceManager.getInterfaces().size());
+ }
+
+ /**
+ * Test version of NetworkConfigService which allows us to pass in subjects
+ * and InterfaceConfigs directly.
+ */
+ private class TestNetworkConfigService extends NetworkConfigServiceAdapter {
+ private final Set<ConnectPoint> subjects;
+ private final Map<ConnectPoint, InterfaceConfig> configs;
+
+ public TestNetworkConfigService(Set<ConnectPoint> subjects,
+ Map<ConnectPoint, InterfaceConfig> configs) {
+ this.subjects = subjects;
+ this.configs = configs;
+ }
+
+ @Override
+ public <S, C extends Config<S>> Set<S> getSubjects(Class<S> subjectClass,
+ Class<C> configClass) {
+ return (Set<S>) subjects;
+ }
+
+ @Override
+ public <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass) {
+ return (C) configs.get(subject);
+ }
+
+ @Override
+ public void addListener(NetworkConfigListener listener) {
+ InterfaceManagerTest.this.listener = listener;
+ }
+ }
+
+ /**
+ * Test version of InterfaceConfig where we can inject interfaces directly,
+ * rather than parsing them from JSON.
+ */
+ private class TestInterfaceConfig extends InterfaceConfig {
+ private final ConnectPoint subject;
+ private final Set<Interface> interfaces;
+
+ @Override
+ public ConnectPoint subject() {
+ return subject;
+ }
+
+ public TestInterfaceConfig(ConnectPoint subject, Set<Interface> interfaces) {
+ this.subject = subject;
+ this.interfaces = interfaces;
+ }
+
+ @Override
+ public Set<Interface> getInterfaces() throws ConfigException {
+ return interfaces;
+ }
+ }
+
+}
diff --git a/framework/src/onos/incubator/pom.xml b/framework/src/onos/incubator/pom.xml
index 6e6c229d..c94243d2 100644
--- a/framework/src/onos/incubator/pom.xml
+++ b/framework/src/onos/incubator/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/incubator/store/pom.xml b/framework/src/onos/incubator/store/pom.xml
index 54575582..797ccc0b 100644
--- a/framework/src/onos/incubator/store/pom.xml
+++ b/framework/src/onos/incubator/store/pom.xml
@@ -23,7 +23,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-incubator</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/package-info.java b/framework/src/onos/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/package-info.java
new file mode 100644
index 00000000..c1992f07
--- /dev/null
+++ b/framework/src/onos/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * A distributed meter store implementation that stores meter data consistently
+ * across the cluster.
+ */
+package org.onosproject.incubator.store.meter.impl;
diff --git a/framework/src/onos/incubator/store/src/main/java/org/onosproject/incubator/store/resource/impl/DistributedLabelResourceStore.java b/framework/src/onos/incubator/store/src/main/java/org/onosproject/incubator/store/resource/impl/DistributedLabelResourceStore.java
index a014504c..d129def7 100644
--- a/framework/src/onos/incubator/store/src/main/java/org/onosproject/incubator/store/resource/impl/DistributedLabelResourceStore.java
+++ b/framework/src/onos/incubator/store/src/main/java/org/onosproject/incubator/store/resource/impl/DistributedLabelResourceStore.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.store.resource.impl;
import static org.onlab.util.Tools.groupedThreads;
diff --git a/framework/src/onos/incubator/store/src/main/java/org/onosproject/incubator/store/resource/impl/LabelResourceMessageSubjects.java b/framework/src/onos/incubator/store/src/main/java/org/onosproject/incubator/store/resource/impl/LabelResourceMessageSubjects.java
index 0a6f1640..1b2f6515 100644
--- a/framework/src/onos/incubator/store/src/main/java/org/onosproject/incubator/store/resource/impl/LabelResourceMessageSubjects.java
+++ b/framework/src/onos/incubator/store/src/main/java/org/onosproject/incubator/store/resource/impl/LabelResourceMessageSubjects.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.incubator.store.resource.impl;
import org.onosproject.store.cluster.messaging.MessageSubject;
diff --git a/framework/src/onos/openflow/api/pom.xml b/framework/src/onos/openflow/api/pom.xml
index 2fc4f509..e535ac64 100644
--- a/framework/src/onos/openflow/api/pom.xml
+++ b/framework/src/onos/openflow/api/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-of</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/OpenFlowOpticalSwitch.java b/framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/OpenFlowOpticalSwitch.java
index 271e1830..af678d63 100644
--- a/framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/OpenFlowOpticalSwitch.java
+++ b/framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/OpenFlowOpticalSwitch.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.openflow.controller;
/**
diff --git a/framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/PortDescPropertyType.java b/framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/PortDescPropertyType.java
index b5d4743d..3a0f1a0d 100644
--- a/framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/PortDescPropertyType.java
+++ b/framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/PortDescPropertyType.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.openflow.controller;
/**
diff --git a/framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/ThirdPartyMessage.java b/framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/ThirdPartyMessage.java
index 8108afe9..59ef33cf 100644
--- a/framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/ThirdPartyMessage.java
+++ b/framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/ThirdPartyMessage.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.openflow.controller;
import org.jboss.netty.buffer.ChannelBuffer;
diff --git a/framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/WithTypedPorts.java b/framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/WithTypedPorts.java
index b78124b8..8b82b4a7 100644
--- a/framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/WithTypedPorts.java
+++ b/framework/src/onos/openflow/api/src/main/java/org/onosproject/openflow/controller/WithTypedPorts.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.openflow.controller;
import java.util.List;
diff --git a/framework/src/onos/openflow/ctl/pom.xml b/framework/src/onos/openflow/ctl/pom.xml
index 683a09af..56d48550 100644
--- a/framework/src/onos/openflow/ctl/pom.xml
+++ b/framework/src/onos/openflow/ctl/pom.xml
@@ -21,7 +21,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-of</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/openflow/pom.xml b/framework/src/onos/openflow/pom.xml
index deed497f..437f7437 100644
--- a/framework/src/onos/openflow/pom.xml
+++ b/framework/src/onos/openflow/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/ovsdb/api/pom.xml b/framework/src/onos/ovsdb/api/pom.xml
index c1808794..7089216f 100644
--- a/framework/src/onos/ovsdb/api/pom.xml
+++ b/framework/src/onos/ovsdb/api/pom.xml
@@ -21,7 +21,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-ovsdb</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
</parent>
<artifactId>onos-ovsdb-api</artifactId>
<packaging>bundle</packaging>
diff --git a/framework/src/onos/ovsdb/ctl/pom.xml b/framework/src/onos/ovsdb/ctl/pom.xml
index 60c1b439..b8366296 100644
--- a/framework/src/onos/ovsdb/ctl/pom.xml
+++ b/framework/src/onos/ovsdb/ctl/pom.xml
@@ -21,7 +21,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-ovsdb</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/ovsdb/pom.xml b/framework/src/onos/ovsdb/pom.xml
index e7a7ffcc..930978a4 100644
--- a/framework/src/onos/ovsdb/pom.xml
+++ b/framework/src/onos/ovsdb/pom.xml
@@ -21,7 +21,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
</parent>
<artifactId>onos-ovsdb</artifactId>
<name>onos-ovsdb</name>
diff --git a/framework/src/onos/ovsdb/rfc/pom.xml b/framework/src/onos/ovsdb/rfc/pom.xml
index 856ddf07..2868845a 100644
--- a/framework/src/onos/ovsdb/rfc/pom.xml
+++ b/framework/src/onos/ovsdb/rfc/pom.xml
@@ -1,19 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- ~ Copyright 2014 Open Networking Laboratory ~ ~ 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. -->
+<!--
+ ~ Copyright 2015 Open Networking Laboratory
+ ~
+ ~ 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.
+ -->
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-ovsdb</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>onos-ovsdb-rfc</artifactId>
diff --git a/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/exception/package-info.java b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/exception/package-info.java
new file mode 100644
index 00000000..274c8d43
--- /dev/null
+++ b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/exception/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Exceptions used by the OVSDB implementation.
+ */
+package org.onosproject.ovsdb.rfc.exception;
diff --git a/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/package-info.java b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/package-info.java
new file mode 100644
index 00000000..7edf5b46
--- /dev/null
+++ b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/jsonrpc/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * RFC 7047 implementation.
+ */
+package org.onosproject.ovsdb.rfc.jsonrpc;
diff --git a/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/message/package-info.java b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/message/package-info.java
new file mode 100644
index 00000000..1b301262
--- /dev/null
+++ b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/message/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * OVSDB message definitions.
+ */
+package org.onosproject.ovsdb.rfc.message;
diff --git a/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/json/package-info.java b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/json/package-info.java
new file mode 100644
index 00000000..eb2e7c66
--- /dev/null
+++ b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/json/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * OVSDB JSON utilities.
+ */
+package org.onosproject.ovsdb.rfc.notation.json;
diff --git a/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/package-info.java b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/package-info.java
new file mode 100644
index 00000000..1900dfef
--- /dev/null
+++ b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/notation/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * OVSDB primitives.
+ */
+package org.onosproject.ovsdb.rfc.notation;
diff --git a/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/operations/package-info.java b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/operations/package-info.java
new file mode 100644
index 00000000..77fb9f3c
--- /dev/null
+++ b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/operations/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * OVSDB operations.
+ */
+package org.onosproject.ovsdb.rfc.operations;
diff --git a/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/schema/package-info.java b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/schema/package-info.java
new file mode 100644
index 00000000..9a27037c
--- /dev/null
+++ b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/schema/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * OVSDB schema.
+ */
+package org.onosproject.ovsdb.rfc.schema;
diff --git a/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/schema/type/package-info.java b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/schema/type/package-info.java
new file mode 100644
index 00000000..eade2e28
--- /dev/null
+++ b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/schema/type/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * OVSDB schema types.
+ */
+package org.onosproject.ovsdb.rfc.schema.type;
diff --git a/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/OpenVSwitch.java b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/OpenVSwitch.java
index 73d7ca1e..9d20b982 100644
--- a/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/OpenVSwitch.java
+++ b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/OpenVSwitch.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.ovsdb.rfc.table;
import java.util.Map;
diff --git a/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Port.java b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Port.java
index 996e93ff..1e1ab7d7 100644
--- a/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Port.java
+++ b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Port.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.ovsdb.rfc.table;
import java.util.Map;
diff --git a/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/package-info.java b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/package-info.java
new file mode 100644
index 00000000..e235b168
--- /dev/null
+++ b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * OVSDB table definitions.
+ */
+package org.onosproject.ovsdb.rfc.table;
diff --git a/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/package-info.java b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/package-info.java
new file mode 100644
index 00000000..cc607da7
--- /dev/null
+++ b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/tableservice/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * OVSDB table service definitions.
+ */
+package org.onosproject.ovsdb.rfc.tableservice;
diff --git a/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/MutationUtil.java b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/MutationUtil.java
index 00e7dbe8..9ec62d31 100644
--- a/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/MutationUtil.java
+++ b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/MutationUtil.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.ovsdb.rfc.utils;
import org.onosproject.ovsdb.rfc.notation.Mutation;
diff --git a/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/package-info.java b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/package-info.java
new file mode 100644
index 00000000..0a0a4f78
--- /dev/null
+++ b/framework/src/onos/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * OVSDB utilities.
+ */
+package org.onosproject.ovsdb.rfc.utils;
diff --git a/framework/src/onos/pcep/api/pom.xml b/framework/src/onos/pcep/api/pom.xml
index 2926cbea..4588ad6f 100644
--- a/framework/src/onos/pcep/api/pom.xml
+++ b/framework/src/onos/pcep/api/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-pcep-controller</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/pcep/ctl/pom.xml b/framework/src/onos/pcep/ctl/pom.xml
index 0a872ded..f0ed5c2f 100644
--- a/framework/src/onos/pcep/ctl/pom.xml
+++ b/framework/src/onos/pcep/ctl/pom.xml
@@ -21,7 +21,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-pcep-controller</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/pcep/pcepio/pom.xml b/framework/src/onos/pcep/pcepio/pom.xml
index ef25d402..d121a83e 100755
--- a/framework/src/onos/pcep/pcepio/pom.xml
+++ b/framework/src/onos/pcep/pcepio/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-pcep-controller</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorMsgVer1.java b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorMsgVer1.java
index e8801c24..927d83d6 100644
--- a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorMsgVer1.java
+++ b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorMsgVer1.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.pcepio.protocol.ver1;
import java.util.LinkedList;
diff --git a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorObjectVer1.java b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorObjectVer1.java
index dc8c828d..48a337f4 100644
--- a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorObjectVer1.java
+++ b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorObjectVer1.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.pcepio.protocol.ver1;
import java.util.LinkedList;
diff --git a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepMsgPathVer1.java b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepMsgPathVer1.java
index 37bae237..49c738fc 100644
--- a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepMsgPathVer1.java
+++ b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepMsgPathVer1.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.pcepio.protocol.ver1;
import org.jboss.netty.buffer.ChannelBuffer;
diff --git a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/ErrorObjListWithOpen.java b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/ErrorObjListWithOpen.java
index 5730026f..40f89f4c 100644
--- a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/ErrorObjListWithOpen.java
+++ b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/ErrorObjListWithOpen.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.pcepio.types;
import java.util.LinkedList;
diff --git a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PathSetupTypeTlv.java b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PathSetupTypeTlv.java
index 34fad299..3e8f9676 100644
--- a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PathSetupTypeTlv.java
+++ b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PathSetupTypeTlv.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.pcepio.types;
import java.util.Objects;
diff --git a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PceccCapabilityTlv.java b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PceccCapabilityTlv.java
index 7c2f1343..b8ae1e87 100644
--- a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PceccCapabilityTlv.java
+++ b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PceccCapabilityTlv.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.pcepio.types;
import java.util.Objects;
diff --git a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelDbVerTlv.java b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelDbVerTlv.java
index c2b91bc2..7a612454 100644
--- a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelDbVerTlv.java
+++ b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelDbVerTlv.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.pcepio.types;
import java.util.Objects;
diff --git a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelDownload.java b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelDownload.java
index 268ac4ce..e2ad069c 100644
--- a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelDownload.java
+++ b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelDownload.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.pcepio.types;
import java.util.LinkedList;
diff --git a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiUnnumberedAdjacencyIpv4.java b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiUnnumberedAdjacencyIpv4.java
index 1faf01a7..4e8926cf 100644
--- a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiUnnumberedAdjacencyIpv4.java
+++ b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiUnnumberedAdjacencyIpv4.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.pcepio.types;
import java.util.Objects;
diff --git a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv6ErrorSpec.java b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv6ErrorSpec.java
index 0de5543e..4da1ec6d 100644
--- a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv6ErrorSpec.java
+++ b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv6ErrorSpec.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.pcepio.types;
import org.jboss.netty.buffer.ChannelBuffer;
diff --git a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/util/HexDump.java b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/util/HexDump.java
index 60ff8848..c39f606b 100644
--- a/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/util/HexDump.java
+++ b/framework/src/onos/pcep/pcepio/src/main/java/org/onosproject/pcepio/util/HexDump.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.pcepio.util;
import org.jboss.netty.buffer.ChannelBuffer;
diff --git a/framework/src/onos/pcep/pom.xml b/framework/src/onos/pcep/pom.xml
index e3d470b7..f0b9f8c3 100755
--- a/framework/src/onos/pcep/pom.xml
+++ b/framework/src/onos/pcep/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/pom.xml b/framework/src/onos/pom.xml
index d16919b5..1bce8cdb 100644
--- a/framework/src/onos/pom.xml
+++ b/framework/src/onos/pom.xml
@@ -33,7 +33,7 @@
<groupId>org.onosproject</groupId>
<artifactId>onos</artifactId>
<packaging>pom</packaging>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<name>${project.artifactId}</name>
<description>Open Network Operating System root project</description>
diff --git a/framework/src/onos/providers/host/pom.xml b/framework/src/onos/providers/host/pom.xml
index d5231f8d..e8f32ca1 100644
--- a/framework/src/onos/providers/host/pom.xml
+++ b/framework/src/onos/providers/host/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java b/framework/src/onos/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
index b9d90976..d010f178 100644
--- a/framework/src/onos/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
+++ b/framework/src/onos/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
@@ -243,7 +243,7 @@ public class HostLocationProviderTest {
}
@Override
- public void hostDetected(HostId hostId, HostDescription hostDescription) {
+ public void hostDetected(HostId hostId, HostDescription hostDescription, boolean replaceIps) {
DeviceId descr = hostDescription.location().deviceId();
if (added == null) {
added = descr;
diff --git a/framework/src/onos/providers/lldp/pom.xml b/framework/src/onos/providers/lldp/pom.xml
index bc13793e..e47d26c7 100644
--- a/framework/src/onos/providers/lldp/pom.xml
+++ b/framework/src/onos/providers/lldp/pom.xml
@@ -23,7 +23,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/DiscoveryContext.java b/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/DiscoveryContext.java
new file mode 100644
index 00000000..0cd19242
--- /dev/null
+++ b/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/DiscoveryContext.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.provider.lldp.impl;
+
+import org.onosproject.mastership.MastershipService;
+import org.onosproject.net.LinkKey;
+import org.onosproject.net.link.LinkProviderService;
+import org.onosproject.net.packet.PacketService;
+
+/**
+ * Shared context for use by link discovery.
+ */
+interface DiscoveryContext {
+
+ /**
+ * Returns the shared mastership service reference.
+ *
+ * @return mastership service
+ */
+ MastershipService mastershipService();
+
+ /**
+ * Returns the shared link provider service reference.
+ *
+ * @return link provider service
+ */
+ LinkProviderService providerService();
+
+ /**
+ * Returns the shared packet service reference.
+ *
+ * @return packet service
+ */
+ PacketService packetService();
+
+ /**
+ * Returns the probe rate in millis.
+ *
+ * @return probe rate
+ */
+ long probeRate();
+
+ /**
+ * Indicates whether to emit BDDP.
+ *
+ * @return true to emit BDDP
+ */
+ boolean useBDDP();
+
+ /**
+ * Touches the link identified by the given key to indicate that it's active.
+ *
+ * @param key link key
+ */
+ void touchLink(LinkKey key);
+}
diff --git a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java b/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java
index e9e2bfad..386d838f 100644
--- a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java
+++ b/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java
@@ -15,9 +15,9 @@
*/
package org.onosproject.provider.lldp.impl;
-import com.google.common.base.Strings;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Maps;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -35,15 +35,18 @@ import org.onosproject.mastership.MastershipService;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
+import org.onosproject.net.LinkKey;
import org.onosproject.net.Port;
import org.onosproject.net.device.DeviceEvent;
import org.onosproject.net.device.DeviceListener;
import org.onosproject.net.device.DeviceService;
import org.onosproject.net.flow.DefaultTrafficSelector;
import org.onosproject.net.flow.TrafficSelector;
+import org.onosproject.net.link.DefaultLinkDescription;
import org.onosproject.net.link.LinkProvider;
import org.onosproject.net.link.LinkProviderRegistry;
import org.onosproject.net.link.LinkProviderService;
+import org.onosproject.net.link.LinkService;
import org.onosproject.net.packet.PacketContext;
import org.onosproject.net.packet.PacketPriority;
import org.onosproject.net.packet.PacketProcessor;
@@ -57,29 +60,29 @@ import java.io.IOException;
import java.util.Dictionary;
import java.util.EnumSet;
import java.util.Map;
+import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledExecutorService;
+import static com.google.common.base.Strings.isNullOrEmpty;
import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.onlab.util.Tools.get;
import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.net.Link.Type.DIRECT;
import static org.slf4j.LoggerFactory.getLogger;
/**
- * Provider which uses an OpenFlow controller to detect network
- * infrastructure links.
+ * Provider which uses LLDP and BDDP packets to detect network infrastructure links.
*/
@Component(immediate = true)
public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
private static final String PROVIDER_NAME = "org.onosproject.provider.lldp";
- private static final String PROP_USE_BDDP = "useBDDP";
- private static final String PROP_DISABLE_LD = "disableLinkDiscovery";
- private static final String PROP_LLDP_SUPPRESSION = "lldpSuppression";
-
- private static final String DEFAULT_LLDP_SUPPRESSION_CONFIG = "../config/lldp_suppression.json";
+ private static final String FORMAT =
+ "Settings: enabled={}, useBDDP={}, probeRate={}, " +
+ "staleLinkAge={}, lldpSuppression={}";
private final Logger log = getLogger(getClass());
@@ -93,6 +96,9 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
protected DeviceService deviceService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected LinkService linkService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected PacketService packetService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -105,28 +111,51 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
private ScheduledExecutorService executor;
+ // TODO: Add sanity checking for the configurable params based on the delays
+ private static final long DEVICE_SYNC_DELAY = 5;
+ private static final long LINK_PRUNER_DELAY = 3;
+
+ private static final String PROP_ENABLED = "enabled";
+ @Property(name = PROP_ENABLED, boolValue = true,
+ label = "If false, link discovery is disabled")
+ private boolean enabled = false;
+
+ private static final String PROP_USE_BDDP = "useBDDP";
@Property(name = PROP_USE_BDDP, boolValue = true,
label = "Use BDDP for link discovery")
private boolean useBDDP = true;
- @Property(name = PROP_DISABLE_LD, boolValue = false,
- label = "Permanently disable link discovery")
- private boolean disableLinkDiscovery = false;
+ private static final String PROP_PROBE_RATE = "probeRate";
+ private static final int DEFAULT_PROBE_RATE = 3_000;
+ @Property(name = PROP_PROBE_RATE, intValue = DEFAULT_PROBE_RATE,
+ label = "LLDP and BDDP probe rate specified in millis")
+ private int probeRate = DEFAULT_PROBE_RATE;
- private static final long INIT_DELAY = 5;
- private static final long DELAY = 5;
+ private static final String PROP_STALE_LINK_AGE = "staleLinkAge";
+ private static final int DEFAULT_STALE_LINK_AGE = 10_000;
+ @Property(name = PROP_STALE_LINK_AGE, intValue = DEFAULT_STALE_LINK_AGE,
+ label = "Number of millis beyond which links will be considered stale")
+ private int staleLinkAge = DEFAULT_STALE_LINK_AGE;
+ // FIXME: convert to use network config subsystem instead
+ private static final String PROP_LLDP_SUPPRESSION = "lldpSuppression";
+ private static final String DEFAULT_LLDP_SUPPRESSION_CONFIG = "../config/lldp_suppression.json";
@Property(name = PROP_LLDP_SUPPRESSION, value = DEFAULT_LLDP_SUPPRESSION_CONFIG,
label = "Path to LLDP suppression configuration file")
private String lldpSuppression = DEFAULT_LLDP_SUPPRESSION_CONFIG;
-
- private final InternalLinkProvider listener = new InternalLinkProvider();
-
+ private final DiscoveryContext context = new InternalDiscoveryContext();
private final InternalRoleListener roleListener = new InternalRoleListener();
+ private final InternalDeviceListener deviceListener = new InternalDeviceListener();
+ private final InternalPacketProcessor packetProcessor = new InternalPacketProcessor();
+ // Device link discovery helpers.
protected final Map<DeviceId, LinkDiscovery> discoverers = new ConcurrentHashMap<>();
+ // Most recent time a tracked link was seen; links are tracked if their
+ // destination connection point is mastered by this controller instance.
+ private final Map<LinkKey, Long> linkTimes = Maps.newConcurrentMap();
+
private SuppressionRules rules;
private ApplicationId appId;
@@ -141,39 +170,125 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
public void activate(ComponentContext context) {
cfgService.registerProperties(getClass());
appId = coreService.registerApplication(PROVIDER_NAME);
-
- // to load configuration at startup
modified(context);
- if (disableLinkDiscovery) {
- log.info("LinkDiscovery has been permanently disabled by configuration");
- return;
+ log.info("Started");
+ }
+
+ @Deactivate
+ public void deactivate() {
+ cfgService.unregisterProperties(getClass(), false);
+ disable();
+ log.info("Stopped");
+ }
+
+ @Modified
+ public void modified(ComponentContext context) {
+ Dictionary<?, ?> properties = context != null ? context.getProperties() : new Properties();
+
+ boolean newEnabled, newUseBddp;
+ int newProbeRate, newStaleLinkAge;
+ String newLldpSuppression;
+ try {
+ String s = get(properties, PROP_ENABLED);
+ newEnabled = isNullOrEmpty(s) || Boolean.parseBoolean(s.trim());
+
+ s = get(properties, PROP_USE_BDDP);
+ newUseBddp = isNullOrEmpty(s) || Boolean.parseBoolean(s.trim());
+
+ s = get(properties, PROP_PROBE_RATE);
+ newProbeRate = isNullOrEmpty(s) ? probeRate : Integer.parseInt(s.trim());
+
+ s = get(properties, PROP_STALE_LINK_AGE);
+ newStaleLinkAge = isNullOrEmpty(s) ? staleLinkAge : Integer.parseInt(s.trim());
+
+ s = get(properties, PROP_LLDP_SUPPRESSION);
+ newLldpSuppression = isNullOrEmpty(s) ? DEFAULT_LLDP_SUPPRESSION_CONFIG : s;
+
+ } catch (NumberFormatException e) {
+ log.warn(e.getMessage());
+ newEnabled = enabled;
+ newUseBddp = useBDDP;
+ newProbeRate = probeRate;
+ newStaleLinkAge = staleLinkAge;
+ newLldpSuppression = lldpSuppression;
+ }
+
+ boolean wasEnabled = enabled;
+
+ enabled = newEnabled;
+ useBDDP = newUseBddp;
+ probeRate = newProbeRate;
+ staleLinkAge = newStaleLinkAge;
+ lldpSuppression = newLldpSuppression;
+
+ if (!wasEnabled && enabled) {
+ enable();
+ } else if (wasEnabled && !enabled) {
+ disable();
}
+ log.info(FORMAT, enabled, useBDDP, probeRate, staleLinkAge, lldpSuppression);
+ }
+
+ /**
+ * Enables link discovery processing.
+ */
+ private void enable() {
providerService = providerRegistry.register(this);
- deviceService.addListener(listener);
- packetService.addProcessor(listener, PacketProcessor.advisor(0));
masterService.addListener(roleListener);
+ deviceService.addListener(deviceListener);
+ packetService.addProcessor(packetProcessor, PacketProcessor.advisor(0));
+
+ loadSuppressionRules();
+ loadDevices();
+
+ executor = newSingleThreadScheduledExecutor(groupedThreads("onos/link", "discovery-%d"));
+ executor.scheduleAtFixedRate(new SyncDeviceInfoTask(),
+ DEVICE_SYNC_DELAY, DEVICE_SYNC_DELAY, SECONDS);
+ executor.scheduleAtFixedRate(new LinkPrunerTask(),
+ LINK_PRUNER_DELAY, LINK_PRUNER_DELAY, SECONDS);
+
+ requestIntercepts();
+ }
+
+ /**
+ * Disables link discovery processing.
+ */
+ private void disable() {
+ withdrawIntercepts();
+
+ providerRegistry.unregister(this);
+ masterService.removeListener(roleListener);
+ deviceService.removeListener(deviceListener);
+ packetService.removeProcessor(packetProcessor);
+
+ if (executor != null) {
+ executor.shutdownNow();
+ }
+ discoverers.values().forEach(LinkDiscovery::stop);
+ discoverers.clear();
- LinkDiscovery ld;
+ providerService = null;
+ }
+
+ /**
+ * Loads available devices and registers their ports to be probed.
+ */
+ private void loadDevices() {
for (Device device : deviceService.getAvailableDevices()) {
if (rules.isSuppressed(device)) {
log.debug("LinkDiscovery from {} disabled by configuration", device.id());
continue;
}
- ld = new LinkDiscovery(device, packetService, masterService,
- providerService, useBDDP);
+ LinkDiscovery ld = new LinkDiscovery(device, context);
discoverers.put(device.id(), ld);
addPorts(ld, device.id());
}
-
- executor = newSingleThreadScheduledExecutor(groupedThreads("onos/device", "sync-%d"));
- executor.scheduleAtFixedRate(new SyncDeviceInfoTask(), INIT_DELAY, DELAY, SECONDS);
-
- requestIntercepts();
-
- log.info("Started");
}
+ /**
+ * Adds ports of the specified device to the specified discovery helper.
+ */
private void addPorts(LinkDiscovery discoverer, DeviceId deviceId) {
for (Port p : deviceService.getPorts(deviceId)) {
if (rules.isSuppressed(p)) {
@@ -185,54 +300,12 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
}
}
- @Deactivate
- public void deactivate() {
- cfgService.unregisterProperties(getClass(), false);
- if (disableLinkDiscovery) {
- return;
- }
-
- withdrawIntercepts();
-
- providerRegistry.unregister(this);
- deviceService.removeListener(listener);
- packetService.removeProcessor(listener);
- masterService.removeListener(roleListener);
-
- executor.shutdownNow();
- discoverers.values().forEach(LinkDiscovery::stop);
- discoverers.clear();
- providerService = null;
-
- log.info("Stopped");
- }
-
- @Modified
- public void modified(ComponentContext context) {
- if (context == null) {
- loadSuppressionRules();
- return;
- }
- @SuppressWarnings("rawtypes")
- Dictionary properties = context.getProperties();
-
- String s = get(properties, PROP_DISABLE_LD);
- if (!Strings.isNullOrEmpty(s)) {
- disableLinkDiscovery = Boolean.valueOf(s);
- }
- s = get(properties, PROP_USE_BDDP);
- if (!Strings.isNullOrEmpty(s)) {
- useBDDP = Boolean.valueOf(s);
- }
- s = get(properties, PROP_LLDP_SUPPRESSION);
- if (!Strings.isNullOrEmpty(s)) {
- lldpSuppression = s;
- }
- requestIntercepts();
- loadSuppressionRules();
- }
+ /**
+ * Loads LLDP suppression rules.
+ */
private void loadSuppressionRules() {
+ // FIXME: convert to use network configuration
SuppressionRulesStore store = new SuppressionRulesStore(lldpSuppression);
try {
log.info("Reading suppression rules from {}", lldpSuppression);
@@ -249,7 +322,7 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
}
/**
- * Request packet intercepts.
+ * Requests packet intercepts.
*/
private void requestIntercepts() {
TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
@@ -265,7 +338,7 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
}
/**
- * Withdraw packet intercepts.
+ * Withdraws packet intercepts.
*/
private void withdrawIntercepts() {
TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
@@ -275,13 +348,10 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
packetService.cancelPackets(selector.build(), PacketPriority.CONTROL, appId);
}
- private LinkDiscovery createLinkDiscovery(Device device) {
- return new LinkDiscovery(device, packetService, masterService,
- providerService, useBDDP);
- }
-
+ /**
+ * Processes device mastership role changes.
+ */
private class InternalRoleListener implements MastershipListener {
-
@Override
public void event(MastershipEvent event) {
if (MastershipEvent.Type.BACKUPS_CHANGED.equals(event.type())) {
@@ -298,22 +368,18 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
if (rules.isSuppressed(device)) {
return;
}
- synchronized (discoverers) {
- if (!discoverers.containsKey(deviceId)) {
- // ideally, should never reach here
- log.debug("Device mastership changed ({}) {}", event.type(), deviceId);
- discoverers.put(deviceId, createLinkDiscovery(device));
- }
- }
+ discoverers.computeIfAbsent(deviceId, k -> new LinkDiscovery(device, context));
}
}
- private class InternalLinkProvider implements PacketProcessor, DeviceListener {
-
+ /**
+ * Processes device events.
+ */
+ private class InternalDeviceListener implements DeviceListener {
@Override
public void event(DeviceEvent event) {
- LinkDiscovery ld = null;
+ LinkDiscovery ld;
Device device = event.subject();
Port port = event.port();
if (device == null) {
@@ -333,7 +399,7 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
return;
}
log.debug("Device added ({}) {}", event.type(), deviceId);
- discoverers.put(deviceId, createLinkDiscovery(device));
+ discoverers.put(deviceId, new LinkDiscovery(device, context));
} else {
if (ld.isStopped()) {
log.debug("Device restarted ({}) {}", event.type(), deviceId);
@@ -400,7 +466,12 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
log.debug("Unknown event {}", event);
}
}
+ }
+ /**
+ * Processes incoming packets.
+ */
+ private class InternalPacketProcessor implements PacketProcessor {
@Override
public void process(PacketContext context) {
if (context == null) {
@@ -417,8 +488,10 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
}
}
+ /**
+ * Auxiliary task to keep device ports up to date.
+ */
private final class SyncDeviceInfoTask implements Runnable {
-
@Override
public void run() {
if (Thread.currentThread().isInterrupted()) {
@@ -433,20 +506,90 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
}
DeviceId did = dev.id();
synchronized (discoverers) {
- LinkDiscovery discoverer = discoverers.get(did);
- if (discoverer == null) {
- discoverer = createLinkDiscovery(dev);
- discoverers.put(did, discoverer);
- }
-
- addPorts(discoverer, did);
+ LinkDiscovery ld = discoverers
+ .computeIfAbsent(did, k -> new LinkDiscovery(dev, context));
+ addPorts(ld, did);
}
}
} catch (Exception e) {
- // catch all Exception to avoid Scheduled task being suppressed.
+ // Catch all exceptions to avoid task being suppressed
log.error("Exception thrown during synchronization process", e);
}
}
}
+ /**
+ * Auxiliary task for pruning stale links.
+ */
+ private class LinkPrunerTask implements Runnable {
+ @Override
+ public void run() {
+ if (Thread.currentThread().isInterrupted()) {
+ log.info("Interrupted, quitting");
+ return;
+ }
+
+ try {
+ // TODO: There is still a slight possibility of mastership
+ // change occurring right with link going stale. This will
+ // result in the stale link not being pruned.
+ Maps.filterEntries(linkTimes, e -> {
+ if (!masterService.isLocalMaster(e.getKey().dst().deviceId())) {
+ return true;
+ }
+ if (isStale(e.getValue())) {
+ providerService.linkVanished(new DefaultLinkDescription(e.getKey().src(),
+ e.getKey().dst(),
+ DIRECT));
+ return true;
+ }
+ return false;
+ }).clear();
+
+ } catch (Exception e) {
+ // Catch all exceptions to avoid task being suppressed
+ log.error("Exception thrown during link pruning process", e);
+ }
+ }
+
+ private boolean isStale(long lastSeen) {
+ return lastSeen < System.currentTimeMillis() - staleLinkAge;
+ }
+ }
+
+ /**
+ * Provides processing context for the device link discovery helpers.
+ */
+ private class InternalDiscoveryContext implements DiscoveryContext {
+ @Override
+ public MastershipService mastershipService() {
+ return masterService;
+ }
+
+ @Override
+ public LinkProviderService providerService() {
+ return providerService;
+ }
+
+ @Override
+ public PacketService packetService() {
+ return packetService;
+ }
+
+ @Override
+ public long probeRate() {
+ return probeRate;
+ }
+
+ @Override
+ public boolean useBDDP() {
+ return useBDDP;
+ }
+
+ @Override
+ public void touchLink(LinkKey key) {
+ linkTimes.put(key, System.currentTimeMillis());
+ }
+ }
+
}
diff --git a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java b/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java
index a81eeb1d..8cdfd50f 100644
--- a/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java
+++ b/framework/src/onos/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java
@@ -15,44 +15,34 @@
*/
package org.onosproject.provider.lldp.impl;
-import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.jboss.netty.util.Timeout;
import org.jboss.netty.util.TimerTask;
import org.onlab.packet.Ethernet;
import org.onlab.packet.ONOSLLDP;
import org.onlab.util.Timer;
-import org.onosproject.mastership.MastershipService;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
import org.onosproject.net.Link.Type;
+import org.onosproject.net.LinkKey;
import org.onosproject.net.Port;
import org.onosproject.net.PortNumber;
import org.onosproject.net.link.DefaultLinkDescription;
import org.onosproject.net.link.LinkDescription;
-import org.onosproject.net.link.LinkProviderService;
import org.onosproject.net.packet.DefaultOutboundPacket;
import org.onosproject.net.packet.OutboundPacket;
import org.onosproject.net.packet.PacketContext;
-import org.onosproject.net.packet.PacketService;
import org.slf4j.Logger;
import java.nio.ByteBuffer;
-import java.util.Iterator;
-import java.util.Map;
import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
-import static com.google.common.base.Preconditions.checkNotNull;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static org.onosproject.net.PortNumber.portNumber;
import static org.onosproject.net.flow.DefaultTrafficTreatment.builder;
import static org.slf4j.LoggerFactory.getLogger;
-// TODO: add 'fast discovery' mode: drop LLDPs in destination switch but listen for flow_removed messages
-// FIXME: add ability to track links using port pairs or the link inventory
-
/**
* Run discovery process from a physical switch. Ports are initially labeled as
* slow ports. When an LLDP is successfully received, label the remote port as
@@ -60,57 +50,36 @@ import static org.slf4j.LoggerFactory.getLogger;
* LLDP, send an LLDP for a single slow port. Based on FlowVisor topology
* discovery implementation.
*/
-public class LinkDiscovery implements TimerTask {
+class LinkDiscovery implements TimerTask {
private final Logger log = getLogger(getClass());
- private static final short MAX_PROBE_COUNT = 3; // probes to send before link is removed
- private static final short DEFAULT_PROBE_RATE = 3000; // millis
private static final String SRC_MAC = "DE:AD:BE:EF:BA:11";
- private static final String SERVICE_NULL = "Service cannot be null";
private final Device device;
-
- // send 1 probe every probeRate milliseconds
- private final long probeRate = DEFAULT_PROBE_RATE;
-
- private final Set<Long> slowPorts = Sets.newConcurrentHashSet();
- // ports, known to have incoming links
- private final Set<Long> fastPorts = Sets.newConcurrentHashSet();
-
- // number of unacknowledged probes per port
- private final Map<Long, AtomicInteger> portProbeCount = Maps.newHashMap();
+ private final DiscoveryContext context;
private final ONOSLLDP lldpPacket;
private final Ethernet ethPacket;
private Ethernet bddpEth;
- private final boolean useBDDP;
private Timeout timeout;
private volatile boolean isStopped;
- private final LinkProviderService linkProvider;
- private final PacketService pktService;
- private final MastershipService mastershipService;
+ // Set of ports to be probed
+ private final Set<Long> ports = Sets.newConcurrentHashSet();
/**
* Instantiates discovery manager for the given physical switch. Creates a
* generic LLDP packet that will be customized for the port it is sent out on.
* Starts the the timer for the discovery process.
*
- * @param device the physical switch
- * @param pktService packet service
- * @param masterService mastership service
- * @param providerService link provider service
- * @param useBDDP flag to also use BDDP for discovery
+ * @param device the physical switch
+ * @param context discovery context
*/
- public LinkDiscovery(Device device, PacketService pktService,
- MastershipService masterService,
- LinkProviderService providerService, Boolean... useBDDP) {
+ LinkDiscovery(Device device, DiscoveryContext context) {
this.device = device;
- this.linkProvider = checkNotNull(providerService, SERVICE_NULL);
- this.pktService = checkNotNull(pktService, SERVICE_NULL);
- this.mastershipService = checkNotNull(masterService, SERVICE_NULL);
+ this.context = context;
lldpPacket = new ONOSLLDP();
lldpPacket.setChassisId(device.chassisId());
@@ -122,15 +91,11 @@ public class LinkDiscovery implements TimerTask {
ethPacket.setPayload(this.lldpPacket);
ethPacket.setPad(true);
- this.useBDDP = useBDDP.length > 0 ? useBDDP[0] : false;
- if (this.useBDDP) {
- bddpEth = new Ethernet();
- bddpEth.setPayload(lldpPacket);
- bddpEth.setEtherType(Ethernet.TYPE_BSN);
- bddpEth.setDestinationMACAddress(ONOSLLDP.BDDP_MULTICAST);
- bddpEth.setPad(true);
- log.info("Using BDDP to discover network");
- }
+ bddpEth = new Ethernet();
+ bddpEth.setPayload(lldpPacket);
+ bddpEth.setEtherType(Ethernet.TYPE_BSN);
+ bddpEth.setDestinationMACAddress(ONOSLLDP.BDDP_MULTICAST);
+ bddpEth.setPad(true);
isStopped = true;
start();
@@ -138,82 +103,52 @@ public class LinkDiscovery implements TimerTask {
}
- /**
- * Add physical port port to discovery process.
- * Send out initial LLDP and label it as slow port.
- *
- * @param port the port
- */
- public void addPort(Port port) {
- boolean newPort = false;
- synchronized (this) {
- if (!containsPort(port.number().toLong())) {
- newPort = true;
- slowPorts.add(port.number().toLong());
- }
+ synchronized void stop() {
+ if (!isStopped) {
+ isStopped = true;
+ timeout.cancel();
+ } else {
+ log.warn("LinkDiscovery stopped multiple times?");
}
+ }
- boolean isMaster = mastershipService.isLocalMaster(device.id());
- if (newPort && isMaster) {
- log.debug("Sending init probe to port {}@{}", port.number().toLong(), device.id());
- sendProbes(port.number().toLong());
+ synchronized void start() {
+ if (isStopped) {
+ isStopped = false;
+ timeout = Timer.getTimer().newTimeout(this, 0, MILLISECONDS);
+ } else {
+ log.warn("LinkDiscovery started multiple times?");
}
}
- /**
- * Removes physical port from discovery process.
- *
- * @param port the port
- */
- public void removePort(Port port) {
- // Ignore ports that are not on this switch
- long portnum = port.number().toLong();
- synchronized (this) {
- if (slowPorts.contains(portnum)) {
- slowPorts.remove(portnum);
-
- } else if (fastPorts.contains(portnum)) {
- fastPorts.remove(portnum);
- portProbeCount.remove(portnum);
- // no iterator to update
- } else {
- log.warn("Tried to dynamically remove non-existing port {}", portnum);
- }
- }
+ synchronized boolean isStopped() {
+ return isStopped || timeout.isCancelled();
}
/**
- * Method called by remote port to acknowledge receipt of LLDP sent by
- * this port. If slow port, updates label to fast. If fast port, decrements
- * number of unacknowledged probes.
+ * Add physical port port to discovery process.
+ * Send out initial LLDP and label it as slow port.
*
- * @param portNumber the port
+ * @param port the port
*/
- public void ackProbe(Long portNumber) {
- synchronized (this) {
- if (slowPorts.contains(portNumber)) {
- log.debug("Setting slow port to fast: {}:{}", device.id(), portNumber);
- slowPorts.remove(portNumber);
- fastPorts.add(portNumber);
- portProbeCount.put(portNumber, new AtomicInteger(0));
- } else if (fastPorts.contains(portNumber)) {
- portProbeCount.get(portNumber).set(0);
- } else {
- log.debug("Got ackProbe for non-existing port: {}", portNumber);
- }
+ void addPort(Port port) {
+ boolean newPort = ports.add(port.number().toLong());
+ boolean isMaster = context.mastershipService().isLocalMaster(device.id());
+ if (newPort && isMaster) {
+ log.debug("Sending initial probe to port {}@{}", port.number().toLong(), device.id());
+ sendProbes(port.number().toLong());
}
}
-
/**
- * Handles an incoming LLDP packet. Creates link in topology and sends ACK
- * to port where LLDP originated.
+ * Handles an incoming LLDP packet. Creates link in topology and adds the
+ * link for staleness tracking.
*
- * @param context packet context
+ * @param packetContext packet context
* @return true if handled
*/
- public boolean handleLLDP(PacketContext context) {
- Ethernet eth = context.inPacket().parsed();
+ boolean handleLLDP(PacketContext packetContext) {
+ Ethernet eth = packetContext.inPacket().parsed();
if (eth == null) {
return false;
}
@@ -221,10 +156,9 @@ public class LinkDiscovery implements TimerTask {
ONOSLLDP onoslldp = ONOSLLDP.parseONOSLLDP(eth);
if (onoslldp != null) {
PortNumber srcPort = portNumber(onoslldp.getPort());
- PortNumber dstPort = context.inPacket().receivedFrom().port();
+ PortNumber dstPort = packetContext.inPacket().receivedFrom().port();
DeviceId srcDeviceId = DeviceId.deviceId(onoslldp.getDeviceString());
- DeviceId dstDeviceId = context.inPacket().receivedFrom().deviceId();
- ackProbe(dstPort.toLong());
+ DeviceId dstDeviceId = packetContext.inPacket().receivedFrom().deviceId();
ConnectPoint src = new ConnectPoint(srcDeviceId, srcPort);
ConnectPoint dst = new ConnectPoint(dstDeviceId, dstPort);
@@ -234,7 +168,8 @@ public class LinkDiscovery implements TimerTask {
new DefaultLinkDescription(src, dst, Type.INDIRECT);
try {
- linkProvider.linkDetected(ld);
+ context.providerService().linkDetected(ld);
+ context.touchLink(LinkKey.linkKey(src, dst));
} catch (IllegalStateException e) {
return true;
}
@@ -256,61 +191,14 @@ public class LinkDiscovery implements TimerTask {
if (isStopped()) {
return;
}
- if (!mastershipService.isLocalMaster(device.id())) {
- if (!isStopped()) {
- // reschedule timer
- timeout = Timer.getTimer().newTimeout(this, probeRate, MILLISECONDS);
- }
- return;
- }
- log.trace("Sending probes from {}", device.id());
- synchronized (this) {
- Iterator<Long> fastIterator = fastPorts.iterator();
- while (fastIterator.hasNext()) {
- long portNumber = fastIterator.next();
- int probeCount = portProbeCount.get(portNumber).getAndIncrement();
-
- if (probeCount < LinkDiscovery.MAX_PROBE_COUNT) {
- log.trace("Sending fast probe to port {}", portNumber);
- sendProbes(portNumber);
-
- } else {
- // Link down, demote to slowPorts; update fast and slow ports
- fastIterator.remove();
- slowPorts.add(portNumber);
- portProbeCount.remove(portNumber);
-
- ConnectPoint cp = new ConnectPoint(device.id(), portNumber(portNumber));
- log.debug("Link down -> {}", cp);
- linkProvider.linksVanished(cp);
- }
- }
-
- // send a probe for the next slow port
- for (long portNumber : slowPorts) {
- log.trace("Sending slow probe to port {}", portNumber);
- sendProbes(portNumber);
- }
+ if (context.mastershipService().isLocalMaster(device.id())) {
+ log.trace("Sending probes from {}", device.id());
+ ports.forEach(this::sendProbes);
}
if (!isStopped()) {
- // reschedule timer
- timeout = Timer.getTimer().newTimeout(this, probeRate, MILLISECONDS);
- }
- }
-
- public synchronized void stop() {
- isStopped = true;
- timeout.cancel();
- }
-
- public synchronized void start() {
- if (isStopped) {
- isStopped = false;
- timeout = Timer.getTimer().newTimeout(this, 0, MILLISECONDS);
- } else {
- log.warn("LinkDiscovery started multiple times?");
+ timeout = Timer.getTimer().newTimeout(this, context.probeRate(), MILLISECONDS);
}
}
@@ -351,19 +239,15 @@ public class LinkDiscovery implements TimerTask {
private void sendProbes(Long portNumber) {
log.trace("Sending probes out to {}@{}", portNumber, device.id());
OutboundPacket pkt = createOutBoundLLDP(portNumber);
- pktService.emit(pkt);
- if (useBDDP) {
+ context.packetService().emit(pkt);
+ if (context.useBDDP()) {
OutboundPacket bpkt = createOutBoundBDDP(portNumber);
- pktService.emit(bpkt);
+ context.packetService().emit(bpkt);
}
}
- public boolean containsPort(Long portNumber) {
- return slowPorts.contains(portNumber) || fastPorts.contains(portNumber);
- }
-
- public synchronized boolean isStopped() {
- return isStopped || timeout.isCancelled();
+ boolean containsPort(long portNumber) {
+ return ports.contains(portNumber);
}
}
diff --git a/framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LLDPLinkProviderTest.java b/framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LLDPLinkProviderTest.java
index 1d63a15d..b4b7b7b6 100644
--- a/framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LLDPLinkProviderTest.java
+++ b/framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LLDPLinkProviderTest.java
@@ -48,6 +48,7 @@ import org.onosproject.net.link.LinkDescription;
import org.onosproject.net.link.LinkProvider;
import org.onosproject.net.link.LinkProviderRegistry;
import org.onosproject.net.link.LinkProviderService;
+import org.onosproject.net.link.LinkServiceAdapter;
import org.onosproject.net.packet.DefaultInboundPacket;
import org.onosproject.net.packet.InboundPacket;
import org.onosproject.net.packet.OutboundPacket;
@@ -79,7 +80,8 @@ public class LLDPLinkProviderTest {
private static Port pd4;
private final LLDPLinkProvider provider = new LLDPLinkProvider();
- private final TestLinkRegistry linkService = new TestLinkRegistry();
+ private final TestLinkRegistry linkRegistry = new TestLinkRegistry();
+ private final TestLinkService linkService = new TestLinkService();
private final TestPacketService packetService = new TestPacketService();
private final TestDeviceService deviceService = new TestDeviceService();
private final TestMasterShipService masterService = new TestMasterShipService();
@@ -104,11 +106,11 @@ public class LLDPLinkProviderTest {
provider.coreService = coreService;
provider.deviceService = deviceService;
+ provider.linkService = linkService;
provider.packetService = packetService;
- provider.providerRegistry = linkService;
+ provider.providerRegistry = linkRegistry;
provider.masterService = masterService;
-
provider.activate(null);
}
@@ -499,4 +501,6 @@ public class LLDPLinkProviderTest {
}
+ private class TestLinkService extends LinkServiceAdapter {
+ }
}
diff --git a/framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/SuppressionRulesTest.java b/framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/SuppressionRulesTest.java
index 52f0bb1e..03d431af 100644
--- a/framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/SuppressionRulesTest.java
+++ b/framework/src/onos/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/SuppressionRulesTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.provider.lldp.impl;
import static org.junit.Assert.*;
diff --git a/framework/src/onos/providers/netconf/app/features.xml b/framework/src/onos/providers/netconf/app/features.xml
index 6a3d1a2c..bc7491e6 100644
--- a/framework/src/onos/providers/netconf/app/features.xml
+++ b/framework/src/onos/providers/netconf/app/features.xml
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
- ~ Copyright 2015 Open Networking Laboratory
- ~
- ~ 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
+ ~ Copyright 2015 Open Networking Laboratory
+ ~
+ ~ 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.
-->
<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
diff --git a/framework/src/onos/providers/netconf/app/pom.xml b/framework/src/onos/providers/netconf/app/pom.xml
index 8cf56b3f..dbd0a520 100644
--- a/framework/src/onos/providers/netconf/app/pom.xml
+++ b/framework/src/onos/providers/netconf/app/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-netconf-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/providers/netconf/device/pom.xml b/framework/src/onos/providers/netconf/device/pom.xml
index be05e3cd..3465bc3a 100644
--- a/framework/src/onos/providers/netconf/device/pom.xml
+++ b/framework/src/onos/providers/netconf/device/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-netconf-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/providers/netconf/flow/pom.xml b/framework/src/onos/providers/netconf/flow/pom.xml
index 8ee4c4e4..7ccd552f 100644
--- a/framework/src/onos/providers/netconf/flow/pom.xml
+++ b/framework/src/onos/providers/netconf/flow/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-netconf-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/providers/netconf/pom.xml b/framework/src/onos/providers/netconf/pom.xml
index ac08dd4a..f73940fe 100644
--- a/framework/src/onos/providers/netconf/pom.xml
+++ b/framework/src/onos/providers/netconf/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/providers/null/pom.xml b/framework/src/onos/providers/null/pom.xml
index ce547588..1db0753f 100644
--- a/framework/src/onos/providers/null/pom.xml
+++ b/framework/src/onos/providers/null/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/providers/openflow/app/features.xml b/framework/src/onos/providers/openflow/app/features.xml
index 7c410172..9dbae8af 100644
--- a/framework/src/onos/providers/openflow/app/features.xml
+++ b/framework/src/onos/providers/openflow/app/features.xml
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
- ~ Copyright 2015 Open Networking Laboratory
- ~
- ~ 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
+ ~ Copyright 2015 Open Networking Laboratory
+ ~
+ ~ 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.
-->
<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
diff --git a/framework/src/onos/providers/openflow/app/pom.xml b/framework/src/onos/providers/openflow/app/pom.xml
index 62e5eb87..cb55463b 100644
--- a/framework/src/onos/providers/openflow/app/pom.xml
+++ b/framework/src/onos/providers/openflow/app/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-of-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/providers/openflow/device/pom.xml b/framework/src/onos/providers/openflow/device/pom.xml
index 5f27d42b..0408f73e 100644
--- a/framework/src/onos/providers/openflow/device/pom.xml
+++ b/framework/src/onos/providers/openflow/device/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-of-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/providers/openflow/flow/pom.xml b/framework/src/onos/providers/openflow/flow/pom.xml
index 24c430e3..1f65656e 100644
--- a/framework/src/onos/providers/openflow/flow/pom.xml
+++ b/framework/src/onos/providers/openflow/flow/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-of-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/providers/openflow/group/pom.xml b/framework/src/onos/providers/openflow/group/pom.xml
index 97ac5ffe..049ccaff 100644
--- a/framework/src/onos/providers/openflow/group/pom.xml
+++ b/framework/src/onos/providers/openflow/group/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-of-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java b/framework/src/onos/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java
index d66ba090..f923c6f8 100644
--- a/framework/src/onos/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java
+++ b/framework/src/onos/providers/openflow/group/src/test/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProviderTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.provider.of.group.impl;
import com.google.common.collect.Lists;
diff --git a/framework/src/onos/providers/openflow/meter/pom.xml b/framework/src/onos/providers/openflow/meter/pom.xml
index 9de5c1b0..55068cd7 100644
--- a/framework/src/onos/providers/openflow/meter/pom.xml
+++ b/framework/src/onos/providers/openflow/meter/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-of-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/providers/openflow/packet/pom.xml b/framework/src/onos/providers/openflow/packet/pom.xml
index f7f62d8e..cc2316c9 100644
--- a/framework/src/onos/providers/openflow/packet/pom.xml
+++ b/framework/src/onos/providers/openflow/packet/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-of-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/providers/openflow/pom.xml b/framework/src/onos/providers/openflow/pom.xml
index 99ff6649..c098a609 100644
--- a/framework/src/onos/providers/openflow/pom.xml
+++ b/framework/src/onos/providers/openflow/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/providers/ovsdb/app/pom.xml b/framework/src/onos/providers/ovsdb/app/pom.xml
index 7bb506ba..b615d124 100644
--- a/framework/src/onos/providers/ovsdb/app/pom.xml
+++ b/framework/src/onos/providers/ovsdb/app/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-ovsdb-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/providers/ovsdb/device/pom.xml b/framework/src/onos/providers/ovsdb/device/pom.xml
index e5010fa6..8f9b834b 100644
--- a/framework/src/onos/providers/ovsdb/device/pom.xml
+++ b/framework/src/onos/providers/ovsdb/device/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-ovsdb-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
</parent>
<artifactId>onos-ovsdb-provider-device</artifactId>
diff --git a/framework/src/onos/providers/ovsdb/host/pom.xml b/framework/src/onos/providers/ovsdb/host/pom.xml
index 0bd88555..f54a496b 100644
--- a/framework/src/onos/providers/ovsdb/host/pom.xml
+++ b/framework/src/onos/providers/ovsdb/host/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-ovsdb-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
</parent>
<artifactId>onos-ovsdb-provider-host</artifactId>
diff --git a/framework/src/onos/providers/ovsdb/host/src/main/java/org/onosproject/ovsdb/provider/host/OvsdbHostProvider.java b/framework/src/onos/providers/ovsdb/host/src/main/java/org/onosproject/ovsdb/provider/host/OvsdbHostProvider.java
index 8d2fd142..0e3e1564 100644
--- a/framework/src/onos/providers/ovsdb/host/src/main/java/org/onosproject/ovsdb/provider/host/OvsdbHostProvider.java
+++ b/framework/src/onos/providers/ovsdb/host/src/main/java/org/onosproject/ovsdb/provider/host/OvsdbHostProvider.java
@@ -1,148 +1,148 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.ovsdb.provider.host;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onlab.util.Tools.toHex;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.Service;
-import org.onlab.packet.VlanId;
-import org.onosproject.core.CoreService;
-import org.onosproject.net.DefaultAnnotations;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.HostLocation;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.SparseAnnotations;
-import org.onosproject.net.host.DefaultHostDescription;
-import org.onosproject.net.host.HostDescription;
-import org.onosproject.net.host.HostProvider;
-import org.onosproject.net.host.HostProviderRegistry;
-import org.onosproject.net.host.HostProviderService;
-import org.onosproject.net.host.HostService;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.ovsdb.controller.EventSubject;
-import org.onosproject.ovsdb.controller.OvsdbController;
-import org.onosproject.ovsdb.controller.OvsdbEvent;
-import org.onosproject.ovsdb.controller.OvsdbEventListener;
-import org.onosproject.ovsdb.controller.OvsdbEventSubject;
-import org.slf4j.Logger;
-
-/**
- * Provider which uses an ovsdb controller to detect host.
- */
-@Component(immediate = true)
-@Service
-public class OvsdbHostProvider extends AbstractProvider implements HostProvider {
- private final Logger log = getLogger(getClass());
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected HostProviderRegistry providerRegistry;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected HostService hostService;
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected CoreService coreService;
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected OvsdbController controller;
-
- private HostProviderService providerService;
- private OvsdbEventListener innerEventListener = new InnerOvsdbEventListener();
-
- @Activate
- public void activate() {
- providerService = providerRegistry.register(this);
- controller.addOvsdbEventListener(innerEventListener);
- log.info("Started");
- }
-
- @Deactivate
- public void deactivate() {
- providerRegistry.unregister(this);
- providerService = null;
- log.info("Stopped");
- }
-
- public OvsdbHostProvider() {
- super(new ProviderId("ovsdb", "org.onosproject.ovsdb.provider.host"));
- }
-
- @Override
- public void triggerProbe(Host host) {
- log.info("Triggering probe on host {}", host);
- }
-
- private class InnerOvsdbEventListener implements OvsdbEventListener {
-
- @Override
- public void handle(OvsdbEvent<EventSubject> event) {
- OvsdbEventSubject subject = null;
- if (event.subject() instanceof OvsdbEventSubject) {
- subject = (OvsdbEventSubject) event.subject();
- }
- checkNotNull(subject, "EventSubject is not null");
- // If ifaceid is null,it indicates this is not a vm port.
- if (subject.ifaceid() == null) {
- return;
- }
- switch (event.type()) {
- case PORT_ADDED:
- HostId hostId = HostId.hostId(subject.hwAddress(), null);
- DeviceId deviceId = DeviceId.deviceId(uri(subject.dpid().value()));
- PortNumber portNumber = PortNumber.portNumber(subject
- .portNumber().value(), subject.portName().value());
- HostLocation loaction = new HostLocation(deviceId, portNumber,
- 0L);
- SparseAnnotations annotations = DefaultAnnotations.builder()
- .set("ifaceid", subject.ifaceid().value()).build();
- HostDescription hostDescription = new DefaultHostDescription(
- subject.hwAddress(),
- VlanId.vlanId(),
- loaction,
- annotations);
- providerService.hostDetected(hostId, hostDescription);
- break;
- case PORT_REMOVED:
- HostId host = HostId.hostId(subject.hwAddress(), null);
- providerService.hostVanished(host);
- break;
- default:
- break;
- }
-
- }
-
- }
-
- public URI uri(String value) {
- try {
- return new URI("of", toHex(Long.valueOf(value)), null);
- } catch (URISyntaxException e) {
- return null;
- }
- }
-}
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.ovsdb.provider.host;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.onlab.util.Tools.toHex;
+import static org.slf4j.LoggerFactory.getLogger;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.Service;
+import org.onlab.packet.VlanId;
+import org.onosproject.core.CoreService;
+import org.onosproject.net.DefaultAnnotations;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.Host;
+import org.onosproject.net.HostId;
+import org.onosproject.net.HostLocation;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.SparseAnnotations;
+import org.onosproject.net.host.DefaultHostDescription;
+import org.onosproject.net.host.HostDescription;
+import org.onosproject.net.host.HostProvider;
+import org.onosproject.net.host.HostProviderRegistry;
+import org.onosproject.net.host.HostProviderService;
+import org.onosproject.net.host.HostService;
+import org.onosproject.net.provider.AbstractProvider;
+import org.onosproject.net.provider.ProviderId;
+import org.onosproject.ovsdb.controller.EventSubject;
+import org.onosproject.ovsdb.controller.OvsdbController;
+import org.onosproject.ovsdb.controller.OvsdbEvent;
+import org.onosproject.ovsdb.controller.OvsdbEventListener;
+import org.onosproject.ovsdb.controller.OvsdbEventSubject;
+import org.slf4j.Logger;
+
+/**
+ * Provider which uses an ovsdb controller to detect host.
+ */
+@Component(immediate = true)
+@Service
+public class OvsdbHostProvider extends AbstractProvider implements HostProvider {
+ private final Logger log = getLogger(getClass());
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected HostProviderRegistry providerRegistry;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected HostService hostService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected CoreService coreService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected OvsdbController controller;
+
+ private HostProviderService providerService;
+ private OvsdbEventListener innerEventListener = new InnerOvsdbEventListener();
+
+ @Activate
+ public void activate() {
+ providerService = providerRegistry.register(this);
+ controller.addOvsdbEventListener(innerEventListener);
+ log.info("Started");
+ }
+
+ @Deactivate
+ public void deactivate() {
+ providerRegistry.unregister(this);
+ providerService = null;
+ log.info("Stopped");
+ }
+
+ public OvsdbHostProvider() {
+ super(new ProviderId("ovsdb", "org.onosproject.ovsdb.provider.host"));
+ }
+
+ @Override
+ public void triggerProbe(Host host) {
+ log.info("Triggering probe on host {}", host);
+ }
+
+ private class InnerOvsdbEventListener implements OvsdbEventListener {
+
+ @Override
+ public void handle(OvsdbEvent<EventSubject> event) {
+ OvsdbEventSubject subject = null;
+ if (event.subject() instanceof OvsdbEventSubject) {
+ subject = (OvsdbEventSubject) event.subject();
+ }
+ checkNotNull(subject, "EventSubject is not null");
+ // If ifaceid is null,it indicates this is not a vm port.
+ if (subject.ifaceid() == null) {
+ return;
+ }
+ switch (event.type()) {
+ case PORT_ADDED:
+ HostId hostId = HostId.hostId(subject.hwAddress(), null);
+ DeviceId deviceId = DeviceId.deviceId(uri(subject.dpid().value()));
+ PortNumber portNumber = PortNumber.portNumber(subject
+ .portNumber().value(), subject.portName().value());
+ HostLocation loaction = new HostLocation(deviceId, portNumber,
+ 0L);
+ SparseAnnotations annotations = DefaultAnnotations.builder()
+ .set("ifaceid", subject.ifaceid().value()).build();
+ HostDescription hostDescription = new DefaultHostDescription(
+ subject.hwAddress(),
+ VlanId.vlanId(),
+ loaction,
+ annotations);
+ providerService.hostDetected(hostId, hostDescription);
+ break;
+ case PORT_REMOVED:
+ HostId host = HostId.hostId(subject.hwAddress(), null);
+ providerService.hostVanished(host);
+ break;
+ default:
+ break;
+ }
+
+ }
+
+ }
+
+ public URI uri(String value) {
+ try {
+ return new URI("of", toHex(Long.valueOf(value)), null);
+ } catch (URISyntaxException e) {
+ return null;
+ }
+ }
+}
diff --git a/framework/src/onos/providers/ovsdb/host/src/test/java/org/onosproject/ovsdb/provider/host/OvsdbHostProviderTest.java b/framework/src/onos/providers/ovsdb/host/src/test/java/org/onosproject/ovsdb/provider/host/OvsdbHostProviderTest.java
index bf18606c..ad720c85 100644
--- a/framework/src/onos/providers/ovsdb/host/src/test/java/org/onosproject/ovsdb/provider/host/OvsdbHostProviderTest.java
+++ b/framework/src/onos/providers/ovsdb/host/src/test/java/org/onosproject/ovsdb/provider/host/OvsdbHostProviderTest.java
@@ -143,7 +143,7 @@ public class OvsdbHostProviderTest {
}
@Override
- public void hostDetected(HostId hostId, HostDescription hostDescription) {
+ public void hostDetected(HostId hostId, HostDescription hostDescription, boolean replaceIps) {
DeviceId descr = hostDescription.location().deviceId();
if (added == null) {
added = descr;
diff --git a/framework/src/onos/providers/ovsdb/pom.xml b/framework/src/onos/providers/ovsdb/pom.xml
index bf215bc0..cce971d5 100644
--- a/framework/src/onos/providers/ovsdb/pom.xml
+++ b/framework/src/onos/providers/ovsdb/pom.xml
@@ -1,4 +1,19 @@
<?xml version="1.0"?>
+<!--
+ ~ Copyright 2015 Open Networking Laboratory
+ ~
+ ~ 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.
+ -->
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
@@ -7,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
</parent>
<artifactId>onos-ovsdb-providers</artifactId>
diff --git a/framework/src/onos/providers/ovsdb/tunnel/pom.xml b/framework/src/onos/providers/ovsdb/tunnel/pom.xml
index 46ea585b..3eae2588 100644
--- a/framework/src/onos/providers/ovsdb/tunnel/pom.xml
+++ b/framework/src/onos/providers/ovsdb/tunnel/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-ovsdb-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
</parent>
<artifactId>onos-ovsdb-provider-tunnel</artifactId>
diff --git a/framework/src/onos/providers/pcep/app/features.xml b/framework/src/onos/providers/pcep/app/features.xml
index 65a221bb..ee205365 100644
--- a/framework/src/onos/providers/pcep/app/features.xml
+++ b/framework/src/onos/providers/pcep/app/features.xml
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
- ~ Copyright 2015 Open Networking Laboratory
- ~
- ~ 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
+ ~ Copyright 2015 Open Networking Laboratory
+ ~
+ ~ 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.
-->
<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
diff --git a/framework/src/onos/providers/pcep/app/pom.xml b/framework/src/onos/providers/pcep/app/pom.xml
index bce88d99..96a04e88 100644
--- a/framework/src/onos/providers/pcep/app/pom.xml
+++ b/framework/src/onos/providers/pcep/app/pom.xml
@@ -1,10 +1,25 @@
+<!--
+ ~ Copyright 2015 Open Networking Laboratory
+ ~
+ ~ 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.
+ -->
<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>
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-pcep-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/providers/pcep/pom.xml b/framework/src/onos/providers/pcep/pom.xml
index 66a71141..0f885e67 100644
--- a/framework/src/onos/providers/pcep/pom.xml
+++ b/framework/src/onos/providers/pcep/pom.xml
@@ -1,9 +1,24 @@
+<!--
+ ~ Copyright 2015 Open Networking Laboratory
+ ~
+ ~ 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.
+ -->
<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>
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>onos-pcep-providers</artifactId>
diff --git a/framework/src/onos/providers/pcep/topology/pom.xml b/framework/src/onos/providers/pcep/topology/pom.xml
index cd8589b9..ff14b653 100644
--- a/framework/src/onos/providers/pcep/topology/pom.xml
+++ b/framework/src/onos/providers/pcep/topology/pom.xml
@@ -1,9 +1,24 @@
+<!--
+ ~ Copyright 2015 Open Networking Laboratory
+ ~
+ ~ 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.
+ -->
<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>
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-pcep-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>onos-pcep-provider-topology</artifactId>
diff --git a/framework/src/onos/providers/pcep/tunnel/pom.xml b/framework/src/onos/providers/pcep/tunnel/pom.xml
index 09efb8ae..2613c41c 100644
--- a/framework/src/onos/providers/pcep/tunnel/pom.xml
+++ b/framework/src/onos/providers/pcep/tunnel/pom.xml
@@ -1,10 +1,25 @@
+<!--
+ ~ Copyright 2015 Open Networking Laboratory
+ ~
+ ~ 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.
+ -->
<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>
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-pcep-providers</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>onos-pcep-provider-tunnel</artifactId>
diff --git a/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/TunnelStatsCollector.java b/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/TunnelStatsCollector.java
index 39249c5c..cab2bf4c 100644
--- a/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/TunnelStatsCollector.java
+++ b/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/TunnelStatsCollector.java
@@ -1,19 +1,17 @@
/*
+ * Copyright 2015 Open Networking Laboratory
*
- * * Copyright 2014-2015 Open Networking Laboratory
- * *
- * * 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.
+ * 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.onosproject.provider.pcep.tunnel.impl;
diff --git a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientAdapter.java b/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientAdapter.java
index 49e29514..5b010f51 100644
--- a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientAdapter.java
+++ b/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientAdapter.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.provider.pcep.tunnel.impl;
import static org.junit.Assert.assertNotNull;
diff --git a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientControllerAdapter.java b/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientControllerAdapter.java
index 74aa590c..2d2aaafe 100644
--- a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientControllerAdapter.java
+++ b/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientControllerAdapter.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.provider.pcep.tunnel.impl;
import java.util.Collection;
diff --git a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelProviderRegistryAdapter.java b/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelProviderRegistryAdapter.java
index 7292d0b1..0de914c5 100644
--- a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelProviderRegistryAdapter.java
+++ b/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelProviderRegistryAdapter.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.provider.pcep.tunnel.impl;
import java.util.Set;
diff --git a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelServiceAdapter.java b/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelServiceAdapter.java
index 1dd77332..0603cb3d 100644
--- a/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelServiceAdapter.java
+++ b/framework/src/onos/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelServiceAdapter.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.provider.pcep.tunnel.impl;
import org.onosproject.core.ApplicationId;
diff --git a/framework/src/onos/providers/pom.xml b/framework/src/onos/providers/pom.xml
index 87dd5656..a02f8d4f 100644
--- a/framework/src/onos/providers/pom.xml
+++ b/framework/src/onos/providers/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/tools/build/envDefaults b/framework/src/onos/tools/build/envDefaults
index 57c1f677..34fcccb2 100644
--- a/framework/src/onos/tools/build/envDefaults
+++ b/framework/src/onos/tools/build/envDefaults
@@ -18,8 +18,8 @@ export PATH="$PATH:$ONOS_ROOT/tools/build"
export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)~$(date +'%Y/%m/%d@%H:%M')}
# ONOS Version and onos.tar.gz staging environment
-export ONOS_POM_VERSION="1.3.0-SNAPSHOT"
-export ONOS_VERSION=${ONOS_VERSION:-1.3.0.$BUILD_NUMBER}
+export ONOS_POM_VERSION="1.4.0-SNAPSHOT"
+export ONOS_VERSION=${ONOS_VERSION:-1.4.0.$BUILD_NUMBER}
# ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment
export ONOS_BITS=onos-${ONOS_VERSION%~*}
diff --git a/framework/src/onos/tools/build/onos-package b/framework/src/onos/tools/build/onos-package
index 8f6127da..32794457 100755
--- a/framework/src/onos/tools/build/onos-package
+++ b/framework/src/onos/tools/build/onos-package
@@ -30,7 +30,7 @@ function build_stage_dir() {
# Stage the ONOS admin scripts and patch in Karaf service wrapper extras
cp -r $ONOS_ROOT/tools/package/bin .
- cp -r $ONOS_ROOT/tools/package/debian $ONOS_STAGE/debian
+ cp -r $ONOS_ROOT/tools/package/init $ONOS_STAGE/init
cp -r $ONOS_ROOT/tools/package/etc/* $ONOS_STAGE/$KARAF_DIST/etc
# Stage all builtin ONOS apps for factory install
@@ -49,7 +49,7 @@ function build_stage_dir() {
# Stage the ONOS bundles, but only those that match the version
mkdir -p $ONOS_STAGE/$KARAF_DIST/system/org/onosproject
find $M2_REPO/org/onosproject -type f -path "*/$ONOS_POM_VERSION/*" \
- -name '*.jar' -o -name '*.pom' -o -name '*-features.xml' \
+ \( -name '*.jar' -o -name '*.pom' -o -name '*-features.xml' \) \
| grep -v -Ee '-tests.jar|-[0-9]{8}.[0-9]{6}-' \
| while read src; do
dst=$ONOS_STAGE/$KARAF_DIST/system/${src#$M2_REPO/*}
@@ -93,25 +93,19 @@ function build_compressed_package() {
# Build a DEB package
function build_deb() {
- echo "You need to be root in order to generate a proper DEB package."
+ echo "This command may ask for your password to run commands as sudo,"
+ echo " because you need to be root in order to generate a proper DEB package."
sudo rm -fr $ONOS_DEB_ROOT
mkdir -p $ONOS_DEB_ROOT/{DEBIAN,opt,etc/init}
- {
- echo "Package: ONOS"
- echo "Architecture: all"
- echo "Maintainer: ONOS Project"
- echo "Depends: debconf (>= 0.5.00), default-jre-headless (>= 1.8) | openjdk-8-jre | oracle-java8-installer"
- echo "Priority: optional"
- echo "Version: $ONOS_POM_VERSION"
- echo "Description: Open Network Operating System (ONOS) is an"
- echo " opensource SDN controller."
- } > $ONOS_DEB_ROOT/DEBIAN/control
+ # Copy the debian directory and fill in version
+ cp -r $ONOS_ROOT/tools/package/deb/* $ONOS_DEB_ROOT/DEBIAN/
+ sed -i'' -E "s/@ONOS_POM_VERSION/$ONOS_POM_VERSION/" $ONOS_DEB_ROOT/DEBIAN/control
cp -r $ONOS_STAGE $ONOS_DEB_ROOT/opt/onos
- cp $ONOS_ROOT/tools/package/debian/onos.conf $ONOS_DEB_ROOT/etc/init/
+ cp $ONOS_ROOT/tools/package/init/onos.conf $ONOS_DEB_ROOT/etc/init/
mkdir -p $ONOS_DEB_ROOT/opt/onos/var/
@@ -119,69 +113,33 @@ function build_deb() {
sudo dpkg-deb --build $ONOS_DEB_ROOT > /dev/null &&
sudo mv $ONOS_STAGE_ROOT/deb.deb $ONOS_DEB && ls -l $ONOS_DEB
+
+ #TODO run lintian on .deb
}
# Build an RPM package
function build_rpm() {
read -r -p "WARN: rpm-build utility and root priviledges are need to build the package. Do you want to continue? [Y/n] " response
- case $response in
- [nN][oO])
- exit 0
- ;;
- *)
- sudo rm -fr $ONOS_RPM_ROOT
-
- sudo yum -y install rpm-build
-
- mkdir -p $ONOS_RPM_ROOT/{BUILD,RPMS,SOURCES/ONOS-$ONOS_RPM_VERSION/{etc/init,opt},SPECS,SRPMS}
-
- cp -r $ONOS_STAGE $ONOS_RPM_ROOT/SOURCES/ONOS-$ONOS_RPM_VERSION/opt/onos
- cp $ONOS_ROOT/tools/package/debian/onos.conf $ONOS_RPM_ROOT/SOURCES/ONOS-$ONOS_RPM_VERSION/etc/init/
-
- cd $ONOS_RPM_ROOT/SOURCES
- COPYFILE_DISABLE=1 tar zcf ONOS-$ONOS_RPM_VERSION.tar.gz ONOS-$ONOS_RPM_VERSION
-
- {
- echo "Name: ONOS"
- echo "Version: $ONOS_RPM_VERSION"
- echo "Release: 1"
- echo "Summary: Open Networking Operating System (ONOS)"
- echo "Vendor: ONOS Project"
- echo "Packager: ONOS Project"
- echo "Group: Applications/Engineering"
- echo "Requires: jre >= 1:8"
- echo "License: Apache 2.0"
- echo "URL: http://www.onosproject.org"
- echo "Source0: ONOS-$ONOS_RPM_VERSION.tar.gz"
- echo "BuildArch: noarch"
- echo "BuildRoot: %{_tmppath}/%{name}-buildroot"
- echo "%description"
- echo "Open Network Operating System (ONOS) is an opensource SDN controller."
- echo -e "\n"
- echo "%prep"
- echo "%setup -q"
- echo -e "\n"
- echo "%install"
- echo "mkdir -p %{buildroot}"
- echo "cp -R * %{buildroot}"
- echo -e "\n"
- echo "%clean"
- echo "rm -rf %{buildroot}"
- echo -e "\n"
- echo "%files"
- echo "%defattr(-,root,root,-)"
- echo "/etc/init/onos.conf"
- echo "/opt/onos/"
- echo -e "\n"
- echo "%post"
- echo "echo ONOS successfully installed at /opt/onos"
- } > $ONOS_RPM_ROOT/SPECS/onos.spec
-
- rpmbuild --define "_topdir $ONOS_RPM_ROOT" -bb $ONOS_RPM_ROOT/SPECS/onos.spec
-
- cp $ONOS_RPM_ROOT/RPMS/noarch/ONOS-$ONOS_RPM_VERSION-1.noarch.rpm $ONOS_STAGE_ROOT && ls -l $ONOS_STAGE_ROOT/ONOS-$ONOS_RPM_VERSION-1.noarch.rpm
- ;;
- esac
+ [[ "$response" =~ ^[Nn] ]] && exit 0
+
+ sudo rm -fr $ONOS_RPM_ROOT
+
+ sudo yum -y install rpm-build
+
+ mkdir -p $ONOS_RPM_ROOT/{BUILD,RPMS,SOURCES/onos-$ONOS_RPM_VERSION/{etc/init,opt},SPECS,SRPMS}
+
+ cp -r $ONOS_STAGE $ONOS_RPM_ROOT/SOURCES/onos-$ONOS_RPM_VERSION/opt/onos
+ cp $ONOS_ROOT/tools/package/init/onos.conf $ONOS_RPM_ROOT/SOURCES/onos-$ONOS_RPM_VERSION/etc/init/
+
+ cd $ONOS_RPM_ROOT/SOURCES
+ COPYFILE_DISABLE=1 tar zcf onos-$ONOS_RPM_VERSION.tar.gz onos-$ONOS_RPM_VERSION
+
+ cp $ONOS_ROOT/tools/package/rpm/onos.spec $ONOS_RPM_ROOT/SPECS/
+ sed -i'' -E "s/@ONOS_RPM_VERSION/$ONOS_RPM_VERSION/g" $ONOS_RPM_ROOT/SPECS/onos.spec
+
+ rpmbuild --define "_topdir $ONOS_RPM_ROOT" -bb $ONOS_RPM_ROOT/SPECS/onos.spec
+
+ cp $ONOS_RPM_ROOT/RPMS/noarch/onos-$ONOS_RPM_VERSION-1.noarch.rpm $ONOS_STAGE_ROOT && ls -l $ONOS_STAGE_ROOT/onos-$ONOS_RPM_VERSION-1.noarch.rpm
}
# Script entry point
diff --git a/framework/src/onos/tools/build/onosUploadBits.py b/framework/src/onos/tools/build/onosUploadBits.py
index b86f45d0..dc2f0a4a 100755
--- a/framework/src/onos/tools/build/onosUploadBits.py
+++ b/framework/src/onos/tools/build/onosUploadBits.py
@@ -16,7 +16,7 @@ bitsPath = '/tmp'
prefix = 'onos-(\d+\.\d+\.\d+)'
buildNum = '\.?([\w-]*)'
-ext = '\.(?:tar\.gz|zip)'
+ext = '\.(?:tar\.gz|zip|deb|noarch\.rpm)'
def findBits( path ):
for file in listdir( path ):
diff --git a/framework/src/onos/tools/package/archetypes/api/pom.xml b/framework/src/onos/tools/package/archetypes/api/pom.xml
index d34db1f0..8deaada9 100644
--- a/framework/src/onos/tools/package/archetypes/api/pom.xml
+++ b/framework/src/onos/tools/package/archetypes/api/pom.xml
@@ -20,7 +20,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-archetypes</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
</parent>
<artifactId>onos-api-archetype</artifactId>
diff --git a/framework/src/onos/tools/package/archetypes/api/src/main/resources/archetype-resources/pom.xml b/framework/src/onos/tools/package/archetypes/api/src/main/resources/archetype-resources/pom.xml
index f29a327a..a0e54f3f 100644
--- a/framework/src/onos/tools/package/archetypes/api/src/main/resources/archetype-resources/pom.xml
+++ b/framework/src/onos/tools/package/archetypes/api/src/main/resources/archetype-resources/pom.xml
@@ -26,7 +26,7 @@
<url>http://onosproject.org</url>
<properties>
- <onos.version>1.3.0-SNAPSHOT</onos.version>
+ <onos.version>1.4.0-SNAPSHOT</onos.version>
</properties>
<dependencies>
diff --git a/framework/src/onos/tools/package/archetypes/bundle/pom.xml b/framework/src/onos/tools/package/archetypes/bundle/pom.xml
index ff6aa52e..65b55b2b 100644
--- a/framework/src/onos/tools/package/archetypes/bundle/pom.xml
+++ b/framework/src/onos/tools/package/archetypes/bundle/pom.xml
@@ -20,7 +20,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-archetypes</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
</parent>
<artifactId>onos-bundle-archetype</artifactId>
diff --git a/framework/src/onos/tools/package/archetypes/bundle/src/main/resources/archetype-resources/pom.xml b/framework/src/onos/tools/package/archetypes/bundle/src/main/resources/archetype-resources/pom.xml
index c9e747c9..222e8b03 100644
--- a/framework/src/onos/tools/package/archetypes/bundle/src/main/resources/archetype-resources/pom.xml
+++ b/framework/src/onos/tools/package/archetypes/bundle/src/main/resources/archetype-resources/pom.xml
@@ -26,7 +26,7 @@
<url>http://onosproject.org</url>
<properties>
- <onos.version>1.3.0-SNAPSHOT</onos.version>
+ <onos.version>1.4.0-SNAPSHOT</onos.version>
<!-- Uncomment to generate ONOS app from this module.
<onos.app.name>org.foo.app</onos.app.name>
<onos.app.origin>Foo, Inc.</onos.app.origin>
diff --git a/framework/src/onos/tools/package/archetypes/cli/pom.xml b/framework/src/onos/tools/package/archetypes/cli/pom.xml
index 1ab9c1f2..a071eed1 100644
--- a/framework/src/onos/tools/package/archetypes/cli/pom.xml
+++ b/framework/src/onos/tools/package/archetypes/cli/pom.xml
@@ -20,7 +20,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-archetypes</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
</parent>
<artifactId>onos-cli-archetype</artifactId>
diff --git a/framework/src/onos/tools/package/archetypes/cli/src/main/resources/archetype-resources/pom.xml b/framework/src/onos/tools/package/archetypes/cli/src/main/resources/archetype-resources/pom.xml
index cb3862c3..f4602692 100644
--- a/framework/src/onos/tools/package/archetypes/cli/src/main/resources/archetype-resources/pom.xml
+++ b/framework/src/onos/tools/package/archetypes/cli/src/main/resources/archetype-resources/pom.xml
@@ -26,7 +26,7 @@
<url>http://onosproject.org</url>
<properties>
- <onos.version>1.3.0-SNAPSHOT</onos.version>
+ <onos.version>1.4.0-SNAPSHOT</onos.version>
</properties>
<dependencies>
diff --git a/framework/src/onos/tools/package/archetypes/pom.xml b/framework/src/onos/tools/package/archetypes/pom.xml
index 2fd5f874..525a2f68 100644
--- a/framework/src/onos/tools/package/archetypes/pom.xml
+++ b/framework/src/onos/tools/package/archetypes/pom.xml
@@ -28,7 +28,7 @@
<groupId>org.onosproject</groupId>
<artifactId>onos-archetypes</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<packaging>pom</packaging>
<description>ONOS archetypes project</description>
diff --git a/framework/src/onos/tools/package/archetypes/ui/pom.xml b/framework/src/onos/tools/package/archetypes/ui/pom.xml
index ca7b2d87..8dd3a8e0 100644
--- a/framework/src/onos/tools/package/archetypes/ui/pom.xml
+++ b/framework/src/onos/tools/package/archetypes/ui/pom.xml
@@ -20,7 +20,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-archetypes</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
</parent>
<artifactId>onos-ui-archetype</artifactId>
diff --git a/framework/src/onos/tools/package/archetypes/ui/src/main/resources/archetype-resources/pom.xml b/framework/src/onos/tools/package/archetypes/ui/src/main/resources/archetype-resources/pom.xml
index a6beae99..2e1f091e 100644
--- a/framework/src/onos/tools/package/archetypes/ui/src/main/resources/archetype-resources/pom.xml
+++ b/framework/src/onos/tools/package/archetypes/ui/src/main/resources/archetype-resources/pom.xml
@@ -26,7 +26,7 @@
<url>http://onosproject.org</url>
<properties>
- <onos.version>1.3.0-SNAPSHOT</onos.version>
+ <onos.version>1.4.0-SNAPSHOT</onos.version>
<!-- Uncomment to generate ONOS app from this module.
<onos.app.name>org.foo.app</onos.app.name>
<onos.app.origin>Foo, Inc.</onos.app.origin>
diff --git a/framework/src/onos/tools/package/branding/pom.xml b/framework/src/onos/tools/package/branding/pom.xml
index 452a03c9..be9c4165 100644
--- a/framework/src/onos/tools/package/branding/pom.xml
+++ b/framework/src/onos/tools/package/branding/pom.xml
@@ -21,7 +21,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../../../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/tools/package/deb/control b/framework/src/onos/tools/package/deb/control
new file mode 100644
index 00000000..c581ac25
--- /dev/null
+++ b/framework/src/onos/tools/package/deb/control
@@ -0,0 +1,8 @@
+Package: onos
+Architecture: all
+Maintainer: ONOS Project
+Depends: debconf (>= 0.5.00), default-jre-headless (>= 1.8) | openjdk-8-jre | oracle-java8-installer
+Priority: optional
+Version: @ONOS_POM_VERSION
+Description: Open Network Operating System (ONOS)
+ Open Network Operating System (ONOS) is an opensource SDN controller.
diff --git a/framework/src/onos/tools/package/deb/copyright b/framework/src/onos/tools/package/deb/copyright
new file mode 100644
index 00000000..09ec05e3
--- /dev/null
+++ b/framework/src/onos/tools/package/deb/copyright
@@ -0,0 +1,20 @@
+Upstream-Name: onos
+Source: http://github.com/opennetworkinglab/onos
+
+Files: *
+Copyright: 2014-2015 Open Networking Laboratory
+License: Apache 2.0
+ 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.
+ .
+ On Debian systems, the complete text of the Apache License 2.0 can
+ be found in "/usr/share/common-licenses/Apache-2.0"
diff --git a/framework/src/onos/tools/package/deb/postinst b/framework/src/onos/tools/package/deb/postinst
new file mode 100755
index 00000000..60de14a7
--- /dev/null
+++ b/framework/src/onos/tools/package/deb/postinst
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+ONOS_USER=sdn
+
+# Check to see if user exists, and if not, create a service account
+getent passwd $ONOS_USER >/dev/null 2&>1 || ( useradd -M $ONOS_USER && usermod -L $ONOS_USER )
+
+# Create ONOS options file
+[ ! -f /opt/onos/options ] && cat << EOF > /opt/onos/options
+export ONOS_OPTS=server
+export ONOS_USER="$ONOS_USER"
+EOF
+
+# Change permissions for onos directory
+[ -d /opt/onos ] && chown -R $ONOS_USER.$ONOS_USER /opt/onos
+
diff --git a/framework/src/onos/tools/package/deb/postrm b/framework/src/onos/tools/package/deb/postrm
new file mode 100755
index 00000000..90dd6164
--- /dev/null
+++ b/framework/src/onos/tools/package/deb/postrm
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+# FIXME dpkg will remove /opt if it is empty after removing onos
+# We should recreate /opt if it was deleted.
+sudo mkdir -p /opt
diff --git a/framework/src/onos/tools/package/deb/prerm b/framework/src/onos/tools/package/deb/prerm
new file mode 100755
index 00000000..2a1633da
--- /dev/null
+++ b/framework/src/onos/tools/package/deb/prerm
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+# Check if onos is running; if it is, stop onos
+[ -z "$(status onos 2>/dev/null | grep start)" ] && echo "onos is not running." || (
+ stop onos
+
+ # Wait for onos to stop up to 5 seconds
+ for i in $(seq 1 5); do
+ [ -z "$(ps -ef | grep karaf.jar | grep -v grep)" ] && break
+ sleep 1
+ done
+ [ -z "$(ps -ef | grep karaf.jar | grep -v grep)" ] && echo 'Stopped onos service' || echo 'Failed to stop onos'
+)
+
+# Clean up onos runtime directories
+# TODO don't hardcode karaf version
+rm -rf /opt/onos/apache-karaf-3.0.3/
+rm -rf /opt/onos/var/*
+rm -rf /opt/onos/config
+rm -rf /opt/onos/options
+rm -rf /opt/onos/log
+
+#TODO consider removing the sdn user if we created it
diff --git a/framework/src/onos/tools/package/init/onos.conf b/framework/src/onos/tools/package/init/onos.conf
new file mode 100644
index 00000000..779df905
--- /dev/null
+++ b/framework/src/onos/tools/package/init/onos.conf
@@ -0,0 +1,37 @@
+description "Open Network Operating System"
+author "ON.Lab"
+
+start on (net-device-up
+ and local-filesystems
+ and runlevel [2345])
+stop on runlevel [016]
+
+console output
+kill timeout 60
+respawn
+
+env LANG=en_US.UTF-8
+
+pre-start script
+ [ -f /opt/onos/options ] && . /opt/onos/options
+ ONOS_USER=${ONOS_USER:-root}
+
+ # Ensure that the environment is initialized
+ [ -d /opt/onos ] && mkdir /opt/onos/var 2>/dev/null && chown $ONOS_USER.$ONOS_USER /opt/onos/var
+ [ -d /opt/onos ] && mkdir /opt/onos/config 2>/dev/null && chown $ONOS_USER.$ONOS_USER /opt/onos/config
+ # TODO make karaf version configurable
+ [ -d /opt/onos ] && [ ! -h /opt/onos/log ] \
+ && ln -s /opt/onos/apache-karaf-3.0.3/data/log /opt/onos/log || :
+end script
+
+pre-stop script
+ /opt/onos/bin/onos halt 2>>/opt/onos/var/stderr.log
+ sleep 1
+end script
+
+script
+ [ -f /opt/onos/options ] && . /opt/onos/options
+ start-stop-daemon --signal INT --start --chuid ${ONOS_USER:-root} \
+ --exec /opt/onos/bin/onos-service -- ${ONOS_OPTS:-server} \
+ >/opt/onos/var/stdout.log 2>/opt/onos/var/stderr.log
+end script
diff --git a/framework/src/onos/tools/package/rpm/onos.spec b/framework/src/onos/tools/package/rpm/onos.spec
new file mode 100644
index 00000000..df0a05d5
--- /dev/null
+++ b/framework/src/onos/tools/package/rpm/onos.spec
@@ -0,0 +1,71 @@
+Name: onos
+Version: @ONOS_RPM_VERSION
+Release: 1
+Summary: Open Networking Operating System (ONOS)
+Vendor: ONOS Project
+Packager: ONOS Project
+
+Group: Applications/Engineering
+License: Apache 2.0
+Requires: jre >= 1:8
+URL: http://www.onosproject.org
+Source0: %{name}-@ONOS_RPM_VERSION.tar.gz
+
+BuildArch: noarch
+BuildRoot: %{_tmppath}/%{name}-buildroot
+
+%description
+Open Network Operating System (ONOS) is an open source SDN controller.
+
+%prep
+%setup -q
+
+%install
+mkdir -p %{buildroot}
+cp -R * %{buildroot}
+
+%clean
+rm -rf %{buildroot}
+
+%files
+%defattr(-,root,root,-)
+/etc/init/onos.conf
+/opt/onos/
+
+%post
+ONOS_USER=sdn
+
+# Check to see if user exists, and if not, create a service account
+getent passwd $ONOS_USER >/dev/null 2&>1 || ( useradd -M $ONOS_USER && usermod -L $ONOS_USER )
+
+# Create ONOS options file
+[ ! -f /opt/onos/options ] && cat << EOF > /opt/onos/options
+export ONOS_OPTS=server
+export ONOS_USER="$ONOS_USER"
+EOF
+
+# Change permissions for onos directory
+[ -d /opt/onos ] && chown -R $ONOS_USER.$ONOS_USER /opt/onos
+
+echo ONOS successfully installed at /opt/onos
+
+%preun
+# Check if onos is running; if it is, stop onos
+[ -z "$(status onos 2>/dev/null | grep start)" ] && echo "onos is not running." || (
+ stop onos
+
+ # Wait for onos to stop up to 5 seconds
+ for i in $(seq 1 5); do
+ [ -z "$(ps -ef | grep karaf.jar | grep -v grep)" ] && break
+ sleep 1
+ done
+ [ -z "$(ps -ef | grep karaf.jar | grep -v grep)" ] && echo 'Stopped onos service' || echo 'Failed to stop onos'
+)
+
+%postun
+#TODO this should be less brute-force
+rm -rf /opt/onos
+
+%changelog
+# TODO
+
diff --git a/framework/src/onos/tools/test/bin/onos-archetypes-test b/framework/src/onos/tools/test/bin/onos-archetypes-test
index 55f40e76..7ae00332 100755
--- a/framework/src/onos/tools/test/bin/onos-archetypes-test
+++ b/framework/src/onos/tools/test/bin/onos-archetypes-test
@@ -6,7 +6,7 @@
set -e
export AROOT=/tmp/foo
-export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=1.3.0-SNAPSHOT"
+export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=1.4.0-SNAPSHOT"
mkdir -p $AROOT
for an in api bundle cli ui; do
diff --git a/framework/src/onos/tools/test/bin/onos-check-intent b/framework/src/onos/tools/test/bin/onos-check-intent
index e332dc5b..760afafe 100755
--- a/framework/src/onos/tools/test/bin/onos-check-intent
+++ b/framework/src/onos/tools/test/bin/onos-check-intent
@@ -13,7 +13,7 @@ target=${1:-$OCI}
echo onos-check-intent: $*
set -x
-for i in {1..10}; do
+for i in {1..15}; do
onos $target "onos:intents" | tee $aux
( cat $aux | grep "key=$2" | grep "state=$3" ) && cat $aux && exit 0
sleep 1
diff --git a/framework/src/onos/tools/test/bin/onos-check-logs b/framework/src/onos/tools/test/bin/onos-check-logs
index ec1013ab..40e3e106 100755
--- a/framework/src/onos/tools/test/bin/onos-check-logs
+++ b/framework/src/onos/tools/test/bin/onos-check-logs
@@ -3,6 +3,25 @@
# Checks the logs of the remote ONOS instance and makes sure they are clean.
# -----------------------------------------------------------------------------
+function __usage() {
+cat << _EOM_
+
+usage:
+ $(basename $0) [node] ['old']
+
+options:
+ - [node] : The node whose logs to inspect. The default is \$OCI.
+ - ['old'] : If 'old' is specified, the logs are simply searched for errors
+ and exceptions, and they are displayed.
+
+summary:
+ Checks the logs of the remote ONOS instance and makes sure they are clean.
+
+_EOM_
+}
+
+[ "$1" = "-h" ] && __usage && exit 0
+
[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
. $ONOS_ROOT/tools/build/envDefaults
@@ -17,6 +36,7 @@ if [ "$2" = "old" ]; then
else
ssh $remote "
+ [ "'`uname`'" != "'"Linux"'" ] && alias tac='tail -r'
tac $LOG | awk '
BEGIN { off = 0; fail = 0; }
/ org.apache.karaf.main.lock.SimpleFileLock lock/ {
diff --git a/framework/src/onos/tools/test/bin/onos-install b/framework/src/onos/tools/test/bin/onos-install
index 0f4cc9dd..7384c2e3 100755
--- a/framework/src/onos/tools/test/bin/onos-install
+++ b/framework/src/onos/tools/test/bin/onos-install
@@ -43,7 +43,7 @@ ssh $remote "
mkdir -p -- $ONOS_INSTALL_DIR/$KARAF_DIST/data/raft
# Install the upstart configuration file and setup options for debugging
- [ -z "$nostart" ] && sudo cp $ONOS_INSTALL_DIR/debian/onos.conf /etc/init/onos.conf
+ [ -z "$nostart" ] && sudo cp $ONOS_INSTALL_DIR/init/onos.conf /etc/init/onos.conf
echo 'export ONOS_OPTS=debug' > $ONOS_INSTALL_DIR/options
# Setup correct user to run onos-service
diff --git a/framework/src/onos/tools/test/bin/onos-start-network b/framework/src/onos/tools/test/bin/onos-start-network
index 1e162fb4..5412e096 100755
--- a/framework/src/onos/tools/test/bin/onos-start-network
+++ b/framework/src/onos/tools/test/bin/onos-start-network
@@ -1,17 +1,39 @@
#!/bin/bash
# -----------------------------------------------------------------------------
-# Verifies connectivity to each node in ONOS cell.
+# Starts a Mininet network topology connected to all nodes in a cell.
# -----------------------------------------------------------------------------
+function __usage() {
+cat << _EOM_
+
+usage:
+ $(basename $0) [file]
+
+options:
+ - [file] : a Mininet topology file. Default is *sol.py* .
+
+summary:
+ Starts a Mininet network topology connected to all nodes in a cell.
+
+ Currently, all topology files are assumed to be found in
+ \$OCN's ~/topos directory. Therefore [file] must be specified as
+ topos/filename.
+
+_EOM_
+}
+
+[ "$1" = "-h" ] && __usage && exit 0
+
[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
. $ONOS_ROOT/tools/build/envDefaults
SSHCMD="ssh -o PasswordAuthentication=no"
SCPCMD="scp -q -o PasswordAuthentication=no"
+topo=${1:-topos/sol.py}
echo "Copying topology files to mininet vm."
$SSHCMD -n $ONOS_USER@$OCN mkdir -p topos
$SCPCMD $ONOS_ROOT/tools/test/topos/* $ONOS_USER@$OCN:topos/
echo "Starting Network."
-$SSHCMD -t $ONOS_USER@$OCN sudo python topos/sol.py $(env | sort | egrep "OC[0-9]+" | cut -d= -f2)
+$SSHCMD -t $ONOS_USER@$OCN sudo python $topo $(env | sort | egrep "OC[0-9]+" | cut -d= -f2)
diff --git a/framework/src/onos/tools/test/bin/onos-topo-cfg b/framework/src/onos/tools/test/bin/onos-topo-cfg
index 5f40d8e7..489083f7 100755
--- a/framework/src/onos/tools/test/bin/onos-topo-cfg
+++ b/framework/src/onos/tools/test/bin/onos-topo-cfg
@@ -8,7 +8,8 @@
node="${1:-$OCI}"
file="${2:-$ONOS_ROOT/tools/test/topos/oe-linear-3.json}"
+url="${3:-config/topology}"
curl -sS --fail -L --user $ONOS_WEB_USER:$ONOS_WEB_PASS \
-X POST -H 'Content-Type:application/json' \
- http://$node:8181/onos/v1/config/topology -d@$file
+ http://$node:8181/onos/v1/${url} -d@$file
diff --git a/framework/src/onos/tools/test/bin/onos-uninstall b/framework/src/onos/tools/test/bin/onos-uninstall
index c04db7ac..7a8b9a5f 100755
--- a/framework/src/onos/tools/test/bin/onos-uninstall
+++ b/framework/src/onos/tools/test/bin/onos-uninstall
@@ -10,5 +10,15 @@ remote=$ONOS_USER@${1:-$OCI}
ssh $remote "
sudo stop onos 1>/dev/null 2>/dev/null
+
+ # Wait for onos to stop up to 5 seconds
+ for i in \$(seq 1 5); do
+ [ -z \"\$(ps -ef | grep karaf.jar | grep -v grep)\" ] && break
+ sleep 1
+ done
+ [ -z \"\$(ps -ef | grep karaf.jar | grep -v grep)\" ] || echo 'ONOS failed to stop.'
+
+ # Remove onos directory and init file
sudo rm -fr $ONOS_INSTALL_DIR
+ [ -f /etc/init/onos.conf ] && sudo rm /etc/init/onos.conf
"
diff --git a/framework/src/onos/tools/test/bin/stc b/framework/src/onos/tools/test/bin/stc
index fe8a5afe..8737cf3f 100755
--- a/framework/src/onos/tools/test/bin/stc
+++ b/framework/src/onos/tools/test/bin/stc
@@ -3,7 +3,7 @@
# System Test Coordinator
#-------------------------------------------------------------------------------
-VER=1.3.0-SNAPSHOT
+VER=1.4.0-SNAPSHOT
JAR=~/.m2/repository/org/onosproject/onlab-stc/$VER/onlab-stc-$VER.jar
SCENARIOS=$ONOS_ROOT/tools/test/scenarios
@@ -15,9 +15,19 @@ scenario=${1:-smoke}
[ ! -f $scenario ] && scenario=$scenario.xml
[ ! -f $scenario ] && echo "Scenario $scenario file not found" && exit 1
+# Remove the test name from the list of parameters, if one is specified
[ $# -ge 1 ] && shift
-[ -t 1 ] && stcColor=true || unset stcColor
+# If stcColor is not set, we will enable color if this is an interactive session
+[ -t 1 ] && interactive=true || interactive=false
+# stc requires that ONOS_USE_SSH=true, but we will store the old value and reset it after
+sshSet=$([ -z ${ONOS_USE_SSH+x} ]) && oldSSH=$ONOS_USE_SSH
+export ONOS_USE_SSH=true
+
+# Run stc
[ -z "$stcDebug" ] && DEBUG_OPTS=""
-java $DEBUG_OPTS -jar $JAR $scenario "$@"
+stcColor=${stcColor:-$interactive} java $DEBUG_OPTS -jar $JAR $scenario "$@"
+
+# Reset the old value of ONOS_USE_SSH
+[ $sshSet ] && export ONOS_USE_SSH=oldSSH || unset ONOS_USE_SSH
diff --git a/framework/src/onos/tools/test/cells/office b/framework/src/onos/tools/test/cells/office
index 2cd933e2..c8dc5997 100644
--- a/framework/src/onos/tools/test/cells/office
+++ b/framework/src/onos/tools/test/cells/office
@@ -3,5 +3,6 @@
export ONOS_NIC="10.1.10.*"
export OC1="10.1.10.223"
-export ONOS_APPS="drivers,openflow,fwd,proxyarp,mobility"
+unset ONOS_USE_SSH
+export ONOS_APPS="drivers,openflow,fwd,proxyarp,mobility,dhcp"
diff --git a/framework/src/onos/tools/test/configs/office-dhcp.json b/framework/src/onos/tools/test/configs/office-dhcp.json
new file mode 100644
index 00000000..f0cf3fb0
--- /dev/null
+++ b/framework/src/onos/tools/test/configs/office-dhcp.json
@@ -0,0 +1,22 @@
+{
+ "apps": {
+ "org.onosproject.dhcp" : {
+ "dhcp" : {
+ "ip": "10.1.11.50",
+ "mac": "ca:fe:ca:fe:ca:fe",
+ "subnet": "255.255.252.0",
+ "broadcast": "10.1.11.255",
+ "router": "10.1.8.1",
+ "domain": "8.8.8.8",
+ "ttl": "63",
+ "lease": "300",
+ "renew": "150",
+ "rebind": "200",
+ "delay": "2",
+ "timeout": "150",
+ "startip": "10.1.11.51",
+ "endip": "10.1.11.100"
+ }
+ }
+ }
+}
diff --git a/framework/src/onos/tools/test/scenarios/bin/curl-with-retry b/framework/src/onos/tools/test/scenarios/bin/curl-with-retry
new file mode 100755
index 00000000..c9546aea
--- /dev/null
+++ b/framework/src/onos/tools/test/scenarios/bin/curl-with-retry
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+aux=/tmp/stc-$$.log
+trap "rm -f $aux 2>/dev/null" EXIT
+
+url=$1
+
+
+echo curl-with-retry: $*
+
+set -x
+for i in {1..3}; do
+ curl -f -uonos:rocks ${url} >$aux
+ if [ $? = 0 ]; then
+ cat $aux
+ exit 0
+ fi
+ sleep 1
+done
+
+cat $aux
+exit 1
+
diff --git a/framework/src/onos/tools/test/scenarios/bin/find-link-in-cluster.py b/framework/src/onos/tools/test/scenarios/bin/find-link-in-cluster.py
new file mode 100755
index 00000000..928531fd
--- /dev/null
+++ b/framework/src/onos/tools/test/scenarios/bin/find-link-in-cluster.py
@@ -0,0 +1,54 @@
+#! /usr/bin/env python
+
+import requests
+import sys
+
+from requests.auth import HTTPBasicAuth
+
+if len(sys.argv) != 9:
+ print "usage: find-link-in-cluster onos-node name cluster-id expected-length src-device-id src-port dst-device-id dst-port"
+ sys.exit(1)
+
+node = sys.argv[1]
+name = sys.argv[2]
+cluster = sys.argv[3]
+length = int(sys.argv[4])
+srcDeviceId = sys.argv[5]
+srcPort = sys.argv[6]
+dstDeviceId = sys.argv[7]
+dstPort = sys.argv[8]
+
+
+linksRequest = requests.get('http://' + node + ':8181/onos/v1/topology/clusters/'
+ + cluster + '/links',
+ auth=HTTPBasicAuth('onos', 'rocks'))
+
+if linksRequest.status_code != 200:
+ print linksRequest.text
+ sys.exit(1)
+
+linksJson = linksRequest.json()
+linksLength = len(linksJson["links"])
+
+if linksLength != length:
+ print "Expected length {} but got {}".format(length, linksLength)
+ sys.exit(1)
+
+for link in linksJson["links"]:
+ if srcDeviceId == link["src"]["device"] and srcPort == link["src"]["port"]:
+ if dstDeviceId == link["dst"]["device"] and dstPort == link["dst"]["port"]:
+ print "@stc " + name + "SrcDevice=" + link["src"]["device"]
+ print "@stc " + name + "SrcPort=" + link["src"]["port"]
+ print "@stc " + name + "DstDevice=" + link["dst"]["device"]
+ print "@stc " + name + "DstPort=" + link["dst"]["port"]
+ print "@stc " + name + "Type=" + link["type"]
+ print "@stc " + name + "State=" + link["state"]
+ sys.exit(0)
+
+print "Could not find link from {}:{} to {}:{}"\
+ .format(srcDeviceId, srcPort, dstDeviceId, dstPort)
+sys.exit(1)
+
+
+
+
diff --git a/framework/src/onos/tools/test/scenarios/bin/find-topo-infrastructure.py b/framework/src/onos/tools/test/scenarios/bin/find-topo-infrastructure.py
new file mode 100755
index 00000000..6d1970f7
--- /dev/null
+++ b/framework/src/onos/tools/test/scenarios/bin/find-topo-infrastructure.py
@@ -0,0 +1,34 @@
+#! /usr/bin/env python
+
+import requests
+import sys
+import urllib
+
+from requests.auth import HTTPBasicAuth
+
+if len(sys.argv) != 4:
+ print "usage: find-topo-infrastructure onos-node name connect-point"
+ sys.exit(1)
+
+node = sys.argv[1]
+name = sys.argv[2]
+id = sys.argv[3]
+
+infrastructureRequest = requests.get('http://' + node + ':8181/onos/v1/topology/infrastructure/' +
+ urllib.quote_plus(id),
+ auth=HTTPBasicAuth('onos', 'rocks'))
+
+if infrastructureRequest.status_code != 200:
+ print infrastructureRequest.text
+ sys.exit(1)
+
+infrastructureJson = infrastructureRequest.json()
+
+print "@stc " + name + "Infrastructure=" + str(infrastructureJson["infrastructure"])
+
+sys.exit(0)
+
+
+
+
+
diff --git a/framework/src/onos/tools/test/scenarios/bin/query-cluster.py b/framework/src/onos/tools/test/scenarios/bin/query-cluster.py
new file mode 100755
index 00000000..0cac7ac3
--- /dev/null
+++ b/framework/src/onos/tools/test/scenarios/bin/query-cluster.py
@@ -0,0 +1,37 @@
+#! /usr/bin/env python
+
+import requests
+import sys
+import urllib
+
+from requests.auth import HTTPBasicAuth
+
+if len(sys.argv) != 4:
+ print "usage: query-cluster onos-node name cluster-number"
+ sys.exit(1)
+
+node = sys.argv[1]
+name = sys.argv[2]
+cluster = sys.argv[3]
+
+topoRequest = requests.get('http://' + node + ':8181/onos/v1/topology/clusters/'
+ + cluster,
+ auth=HTTPBasicAuth('onos', 'rocks'))
+
+if topoRequest.status_code != 200:
+ print topoRequest.text
+ sys.exit(1)
+
+topoJson = topoRequest.json()
+
+print "@stc " + name + "Id=" + str(topoJson["id"])
+print "@stc " + name + "DeviceCount=" + str(topoJson["deviceCount"])
+print "@stc " + name + "LinkCount=" + str(topoJson["linkCount"])
+print "@stc " + name + "Root=" + topoJson["root"]
+
+sys.exit(0)
+
+
+
+
+
diff --git a/framework/src/onos/tools/test/scenarios/bin/query-topo.py b/framework/src/onos/tools/test/scenarios/bin/query-topo.py
new file mode 100755
index 00000000..9b81b4ee
--- /dev/null
+++ b/framework/src/onos/tools/test/scenarios/bin/query-topo.py
@@ -0,0 +1,35 @@
+#! /usr/bin/env python
+
+import requests
+import sys
+import urllib
+
+from requests.auth import HTTPBasicAuth
+
+if len(sys.argv) != 3:
+ print "usage: query-topo onos-node name"
+ sys.exit(1)
+
+node = sys.argv[1]
+name = sys.argv[2]
+
+topoRequest = requests.get('http://' + node + ':8181/onos/v1/topology/',
+ auth=HTTPBasicAuth('onos', 'rocks'))
+
+if topoRequest.status_code != 200:
+ print topoRequest.text
+ sys.exit(1)
+
+topoJson = topoRequest.json()
+
+print "@stc " + name + "Time=" + str(topoJson["time"])
+print "@stc " + name + "Devices=" + str(topoJson["devices"])
+print "@stc " + name + "Links=" + str(topoJson["links"])
+print "@stc " + name + "Clusters=" + str(topoJson["clusters"])
+
+sys.exit(0)
+
+
+
+
+
diff --git a/framework/src/onos/tools/test/scenarios/bin/verify-topo-devices.py b/framework/src/onos/tools/test/scenarios/bin/verify-topo-devices.py
new file mode 100755
index 00000000..be834b9b
--- /dev/null
+++ b/framework/src/onos/tools/test/scenarios/bin/verify-topo-devices.py
@@ -0,0 +1,51 @@
+#! /usr/bin/env python
+
+import requests
+import sys
+import urllib
+
+from requests.auth import HTTPBasicAuth
+
+if len(sys.argv) != 5:
+ print "usage: verify-topo-links onos-node cluster-id first-index last-index"
+ sys.exit(1)
+
+node = sys.argv[1]
+cluster = sys.argv[2]
+first = int(sys.argv[3])
+last = int(sys.argv[4])
+
+found = 0
+
+topoRequest = requests.get('http://' + node + ':8181/onos/v1/topology/clusters/'
+ + cluster
+ + "/devices",
+ auth=HTTPBasicAuth('onos', 'rocks'))
+
+if topoRequest.status_code != 200:
+ print topoRequest.text
+ sys.exit(1)
+
+topoJson = topoRequest.json()
+
+for deviceIndex in range(first, last+1):
+ lookingFor = "of:" + format(deviceIndex, '016x')
+ print lookingFor
+ for arrayIndex in range(0, len(topoJson["devices"])):
+ device = topoJson["devices"][arrayIndex]
+ if device == lookingFor:
+ found = found + 1
+ print "Match found for " + device
+ break
+
+
+if found == last - first:
+ sys.exit(0)
+
+print "Found " + str(found) + " matches, need " + str(last - first)
+sys.exit(2)
+
+
+
+
+
diff --git a/framework/src/onos/tools/test/scenarios/net-link-down-up.xml b/framework/src/onos/tools/test/scenarios/net-link-down-up.xml
index 8bcbfa7f..eb4727bd 100644
--- a/framework/src/onos/tools/test/scenarios/net-link-down-up.xml
+++ b/framework/src/onos/tools/test/scenarios/net-link-down-up.xml
@@ -20,7 +20,9 @@
exec="onos-mininet sendAndExpect h1 ping -c1 h4 --expect \ 0% packet loss"/>
<step name="Link-1-Down" requires="~Ping-1"
exec="onos-mininet sendAndExpect link s4 s7 down --expect ."/>
- <step name="Ping-2" requires="~Link-1-Down"
+ <step name="Ping-2-Prep" requires="~Link-1-Down"
+ exec="onos-mininet sendAndExpect h1 ping -c5 h4 --expect ."/>
+ <step name="Ping-2" requires="~Ping-2-Prep"
exec="onos-mininet sendAndExpect h1 ping -c1 h4 --expect \ 0% packet loss"/>
<step name="Link-2-Down" requires="~Ping-2"
exec="onos-mininet sendAndExpect link s4 s5 down --expect ."/>
@@ -28,11 +30,15 @@
exec="onos-mininet sendAndExpect h1 ping -c1 -w1 h4 --expect 100% packet loss"/>
<step name="Link-1-Up" requires="~Ping-3"
exec="onos-mininet sendAndExpect link s4 s7 up --expect ."/>
- <step name="Ping-4" requires="~Link-1-Up"
+ <step name="Ping-4-Prep" requires="~Link-1-Up"
+ exec="onos-mininet sendAndExpect h1 ping -c5 h4 --expect ."/>
+ <step name="Ping-4" requires="~Ping-4-Prep"
exec="onos-mininet sendAndExpect h1 ping -c1 h4 --expect \ 0% packet loss"/>
<step name="Link-2-Up" requires="~Ping-4"
exec="onos-mininet sendAndExpect link s4 s5 up --expect ."/>
- <step name="Ping-5" requires="~Link-2-Up"
+ <step name="Ping-5-Prep" requires="~Link-2-Up"
+ exec="onos-mininet sendAndExpect h1 ping -c5 h4 --expect ."/>
+ <step name="Ping-5" requires="~Ping-5-Prep"
exec="onos-mininet sendAndExpect h1 ping -c1 h4 --expect \ 0% packet loss"/>
</group>
-</scenario> \ No newline at end of file
+</scenario>
diff --git a/framework/src/onos/tools/test/scenarios/net-pingall.xml b/framework/src/onos/tools/test/scenarios/net-pingall.xml
index 8968e0dc..87c13227 100644
--- a/framework/src/onos/tools/test/scenarios/net-pingall.xml
+++ b/framework/src/onos/tools/test/scenarios/net-pingall.xml
@@ -23,7 +23,7 @@
<!-- TODO: take this out when initial pingall sweep is 100% -->
<step name="Initial-Ping-All" requires="Check-Apps"
- exec="onos-mininet sendAndExpect py net.pingAll(1) --expect 600 received"/>
+ exec="onos-mininet sendAndExpect py net.pingAll(1) --expect received"/>
<step name="Ping-All-And-Verify" requires="Check-Apps,Initial-Ping-All"
exec="onos-mininet sendAndExpect py net.pingAll(1) --expect 600/600 received"/>
@@ -34,4 +34,4 @@
<step name="Config-Topo" requires="~Check-Summary-For-Hosts"
exec="onos-topo-cfg ${OC1} ${ONOS_ROOT}/tools/test/topos/attmpls.json"/>
</group>
-</scenario> \ No newline at end of file
+</scenario>
diff --git a/framework/src/onos/tools/test/scenarios/net-rest.xml b/framework/src/onos/tools/test/scenarios/net-rest.xml
index fc7b1d08..ab7804df 100644
--- a/framework/src/onos/tools/test/scenarios/net-rest.xml
+++ b/framework/src/onos/tools/test/scenarios/net-rest.xml
@@ -101,10 +101,10 @@
<!-- Check that the intents can be fetched via the REST API -->
<step name="Net-REST.Validate-Intent-XY-Installed"
requires="Net-REST.Create-Intent-YX"
- exec="curl -f -uonos:rocks ${xyLocation}"/>
+ exec="curl-with-retry ${xyLocation}"/>
<step name="Net-REST.Validate-Intent-YX-Installed"
requires="^"
- exec="curl -f -uonos:rocks ${yxLocation}"/>
+ exec="curl-with-retry ${yxLocation}"/>
<!-- Use REST API to query flows created by the intents -->
<step name="Net-REST.Validate-Intent-XY-Flow-Installed"
@@ -120,7 +120,7 @@
<step name="Net-REST.Validate-YX-Flow-State" requires="^"
exec="test '${dev4outFlowState}' == 'ADDED' -o '${dev4outFlowState}' == 'PENDING_ADD'"/>
<step name="Net-REST.Validate-YX-Flow-Port" requires="^"
- exec="test '${dev4outFlowPort}' == '3'"/>
+ exec="test ${dev4outFlowPort} -ge 1 -a ${dev4outFlowPort} -le 5"/>
<!-- Check that connectivity was established -->
<step name="Net-REST.Ping-XY" requires="Net-REST.Create-Intent-XY,Net-REST.Create-Intent-YX"
@@ -139,22 +139,23 @@
exec="curl -f -X DELETE -uonos:rocks ${xyLocation}"/>
<step name="Net-REST.Delete-Intent-YX" requires="^"
exec="curl -f -X DELETE -uonos:rocks ${yxLocation}"/>
+ <step name="Net-REST.Allow-Intents-To-Purge"
+ exec="onos-check-intent ${OC1} xy INSTALLED" env="!"
+ requires="Net-REST.Delete-Intent-XY,Net-REST.Delete-Intent-YX"/>
<!-- Use REST API to be sure that flows are no longer installed -->
- <step name="Net-REST.Validate-XY-Flows-Removed" requires="Net-REST.Delete-Intent-XY"
+ <step name="Net-REST.Validate-XY-Flows-Removed" requires="Net-REST.Allow-Intents-To-Purge"
exec="find-flow.py ${OC1} dev1out of:0000000000000001"
env="!"/>
- <step name="Net-REST.Validate-YX-Flows-Removed" requires="Net-REST.Delete-Intent-YX"
+ <step name="Net-REST.Validate-YX-Flows-Removed" requires="Net-REST.Allow-Intents-To-Purge"
exec="find-flow.py ${OC1} dev4out of:0000000000000004"
env="!"/>
<!-- Check that the deleted intents no longer appear in the REST API -->
- <step name="Net-REST.Allow-Intents-To-Purge" requires="Net-REST.Delete-Intent-XY"
- exec="sleep 1"/>
<step name="Net-REST.Validate-Intent-XY-Removed" requires="Net-REST.Allow-Intents-To-Purge"
- exec="curl -f -uonos:rocks ${xyLocation}" env="!"/>
+ exec="curl-with-retry ${xyLocation}" env="!"/>
<step name="Net-REST.Validate-Intent-YX-Removed" requires="Net-REST.Allow-Intents-To-Purge"
- exec="curl -f -uonos:rocks ${yxLocation}" env="!"/>
+ exec="curl-with-retry ${yxLocation}" env="!"/>
</group>
</scenario>
diff --git a/framework/src/onos/tools/test/scenarios/net-setup.xml b/framework/src/onos/tools/test/scenarios/net-setup.xml
index e179ec5a..13252d0f 100644
--- a/framework/src/onos/tools/test/scenarios/net-setup.xml
+++ b/framework/src/onos/tools/test/scenarios/net-setup.xml
@@ -17,9 +17,9 @@
<!-- TODO: parametrize this via recipes -->
<group name="Net-Setup">
<step name="Push-Topos" exec="onos-push-topos ${OCN}"/>
- <step name="Stop-Mininet-If-Needed" env="~" exec="onos-mininet stop"/>
- <step name="Wipe-Out-Data-Before" exec="onos-wipe-out"/>
+ <step name="Stop-Mininet-If-Needed" env="~" exec="onos-mininet stop"/>
+ <step name="Wipe-Out-Data-Before" exec="onos-wipe-out" requires="^"/>
<step name="Initial-Summary-Check" requires="~Wipe-Out-Data-Before"
exec="onos-check-summary ${OC1} [0-9]* 0 0 0"/>
@@ -43,4 +43,4 @@
<step name="Check-Flows" requires="~Pause-For-Masters,~Check-Summary"
exec="onos-check-flows ${OC1}"/>
</group>
-</scenario> \ No newline at end of file
+</scenario>
diff --git a/framework/src/onos/tools/test/scenarios/net-smoke.xml b/framework/src/onos/tools/test/scenarios/net-smoke.xml
index 53a5729c..91131c62 100644
--- a/framework/src/onos/tools/test/scenarios/net-smoke.xml
+++ b/framework/src/onos/tools/test/scenarios/net-smoke.xml
@@ -35,10 +35,14 @@
<import file="${ONOS_SCENARIOS}/net-create-flows.xml"/>
<dependency name="Net-Create-Flows" requires="Net-Setup,P2P-Intent-Connectivity,Net-REST"/>
+ <import file="${ONOS_SCENARIOS}/net-topo.xml"/>
+ <dependency name="Net-topo" requires="Net-Setup,Net-Create-Flows"/>
+
<import file="${ONOS_SCENARIOS}/net-teardown.xml"/>
<dependency name="Net-Teardown" requires="~Host-Intent-Connectivity,
~P2P-Intent-Connectivity,
~Net-REST,
- ~Net-Create-Flows"/>
+ ~Net-Create-Flows,
+ ~Net-topo"/>
</group>
</scenario>
diff --git a/framework/src/onos/tools/test/scenarios/net-topo.xml b/framework/src/onos/tools/test/scenarios/net-topo.xml
new file mode 100644
index 00000000..e8e23997
--- /dev/null
+++ b/framework/src/onos/tools/test/scenarios/net-topo.xml
@@ -0,0 +1,76 @@
+<!--
+ ~ Copyright 2015 Open Networking Laboratory
+ ~
+ ~ 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.
+ -->
+<scenario name="net-topo"
+ description="Network topology test">
+ <!-- TODO: parametrize this via recipes -->
+ <group name="Net-topo">
+
+ <!-- Verify the overall topology using the REST API -->
+ <step name="Net-topo.Query-Topo"
+ exec="query-topo.py ${OC1} topo"/>
+ <step name="Net-topo.Verify-Topo-Devices" requires="Net-topo.Query-Topo"
+ exec="test ${topoDevices} == 25"/>
+ <step name="Net-topo.Verify-Topo-Links" requires="Net-topo.Query-Topo"
+ exec="test ${topoLinks} == 140"/>
+ <step name="Net-topo.Verify-Topo-Clusters" requires="Net-topo.Query-Topo"
+ exec="test ${topoClusters} == 1"/>
+
+ <!-- Verify the cluster topology using the REST API -->
+ <step name="Net-topo.Query-Cluster0"
+ exec="query-cluster.py ${OC1} clusterTopo0 0"/>
+ <step name="Net-topo.Verify-Cluster0-Id" requires="Net-topo.Query-Cluster0"
+ exec="test ${clusterTopo0Id} == 0"/>
+ <step name="Net-topo.Verify-Cluster0-DeviceCount" requires="Net-topo.Query-Cluster0"
+ exec="test ${clusterTopo0DeviceCount} == 25"/>
+ <step name="Net-topo.Verify-Cluster0-LinkCount" requires="Net-topo.Query-Cluster0"
+ exec="test ${clusterTopo0LinkCount} == 140"/>
+ <step name="Net-topo.Verify-Cluster0-Root" requires="Net-topo.Query-Cluster0"
+ exec="test '${clusterTopo0Root}' == 'of:000000000000000a'"/>
+
+ <!-- Verify the list of devices for the cluster -->
+ <step name="Net-topo.Verify-Cluster0-Devices"
+ exec="verify-topo-devices.py ${OC1} 0 0 24"/>
+
+ <!-- Spot check some known links in the topology -->
+ <step name="Net-topo.Verify-Cluster0-Link1"
+ exec="find-link-in-cluster.py ${OC1} link1 0 140 of:000000000000000f 8 of:0000000000000015 3"/>
+ <step name="Net-topo.Verify-Cluster0-Link2"
+ exec="find-link-in-cluster.py ${OC1} link2 0 140 of:0000000000000008 3 of:0000000000000005 4"/>
+ <step name="Net-topo.Verify-Cluster0-Link3"
+ exec="find-link-in-cluster.py ${OC1} link3 0 140 of:0000000000000011 2 of:0000000000000002 9"/>
+ <step name="Net-topo.Verify-Cluster0-Link4"
+ exec="find-link-in-cluster.py ${OC1} link4 0 140 of:000000000000000f 3 of:000000000000000d 10"/>
+ <step name="Net-topo.Verify-Cluster0-Link5"
+ exec="find-link-in-cluster.py ${OC1} link5 0 140 of:000000000000000d 13 of:0000000000000010 6"/>
+
+ <!-- Verify the topology infrastructure query -->
+ <step name="Net-topo.Query-Cluster0-Infra1"
+ exec="find-topo-infrastructure.py ${OC1} infra1 of:000000000000000f:8"/>
+ <step name="Net-topo.Verify-Cluster0-Infra1" requires="Net-topo.Query-Cluster0-Infra1"
+ exec="test '${infra1Infrastructure}' == 'True'"/>
+
+ <step name="Net-topo.Query-Cluster0-Infra2"
+ exec="find-topo-infrastructure.py ${OC1} infra2 of:000000000000000d:8"/>
+ <step name="Net-topo.Verify-Cluster0-Infra2" requires="Net-topo.Query-Cluster0-Infra2"
+ exec="test '${infra2Infrastructure}' == 'True'"/>
+
+ <step name="Net-topo.Query-Cluster0-Infra3"
+ exec="find-topo-infrastructure.py ${OC1} infra3 of:0000000000000012:8"/>
+ <step name="Net-topo.Verify-Cluster0-Infra3" requires="Net-topo.Query-Cluster0-Infra3"
+ exec="test '${infra3Infrastructure}' == 'False'"/>
+
+ </group>
+</scenario>
diff --git a/framework/src/onos/tools/test/scenarios/prerequisites.xml b/framework/src/onos/tools/test/scenarios/prerequisites.xml
index 650aa411..2c541d5b 100644
--- a/framework/src/onos/tools/test/scenarios/prerequisites.xml
+++ b/framework/src/onos/tools/test/scenarios/prerequisites.xml
@@ -15,7 +15,7 @@
-->
<scenario name="prerequisites" description="ONOS test pre-requisites">
<group name="Prerequisites">
- <step name="Check-Environment" exec="test -n ${ONOS_ROOT} -a -n ${ONOS_NIC} -a -n ${OC1}"/>
+ <step name="Check-Environment" exec="test -n ${ONOS_ROOT} -a -n ${ONOS_NIC} -a -n ${OC1} -a '${ONOS_USE_SSH}' == 'true'"/>
<step name="Check-ONOS-Bits" exec="onos-check-bits"/>
<parallel var="${OC#}">
diff --git a/framework/src/onos/tools/test/topos/onos.py b/framework/src/onos/tools/test/topos/onos.py
index 3e5bff7c..ae6045e3 100755
--- a/framework/src/onos/tools/test/topos/onos.py
+++ b/framework/src/onos/tools/test/topos/onos.py
@@ -62,7 +62,7 @@ class ONOS( Controller ):
def start( self ):
if self.inNamespace:
- instanceOpts = ( '-furl mvn:org.onosproject/onos-features/1.3.0-SNAPSHOT/xml/features '
+ instanceOpts = ( '-furl mvn:org.onosproject/onos-features/1.4.0-SNAPSHOT/xml/features '
'-s 8101' )
if self.ip is not None:
instanceOpts += (' -a %s' % self.IP() )
diff --git a/framework/src/onos/tools/test/topos/opticalUtils.py b/framework/src/onos/tools/test/topos/opticalUtils.py
index bef9deca..a1ae834b 100644
--- a/framework/src/onos/tools/test/topos/opticalUtils.py
+++ b/framework/src/onos/tools/test/topos/opticalUtils.py
@@ -70,9 +70,6 @@ from mininet.cli import CLI
SLEEP_TIME = 2
TIMEOUT = 60
-REST_USER = 'onos'
-REST_PW = 'rocks'
-
class OpticalSwitch(Switch):
"""
For now, same as Switch class.
@@ -152,6 +149,17 @@ class LINCSwitch(OpticalSwitch):
error('Please set ONOS_ROOT environment variable!\n')
else:
os.environ[ 'ONOS_ROOT' ] = onosDir
+ ### REST USER/PASS ###
+ try:
+ restUser = os.environ[ 'ONOS_WEB_USER' ]
+ restPass = os.environ[ 'ONOS_WEB_PASS' ]
+ except:
+ error('***WARNING: $ONOS_WEB_USER and $ONOS_WEB_PASS aren\'t set!\n')
+ error('***WARNING: Setting (probably) sane WEB user/pass values\n')
+ restUser = 'onos'
+ restPass = 'rocks'
+ os.environ[ 'ONOS_WEB_USER' ] = restUser
+ os.environ[ 'ONOS_WEB_PASS' ] = restPass
### LINC-directory
lincDir = findDir.__func__('linc-oe', user)
if not lincDir:
@@ -283,7 +291,7 @@ class LINCSwitch(OpticalSwitch):
json.dump(crossConnectJSON, fd, indent=4, separators=(',', ': '))
info('*** Pushing crossConnect.json to ONOS\n')
output = quietRun('%s/tools/test/bin/onos-topo-cfg %s\
- Topology.json' % (self.onosDir, self.controllers[ 0 ].ip), shell=True)
+ Topology.json network/configuration/' % (self.onosDir, self.controllers[ 0 ].ip), shell=True)
def stop_oe(self):
'''
@@ -366,16 +374,17 @@ class LINCSwitch(OpticalSwitch):
LINCSwitch.opticalJSON[ 'links' ] = linkConfig
info('*** Writing Topology.json file\n')
+ topoJSON = LINCSwitch.makeTopoJSON()
with open('Topology.json', 'w') as outfile:
- json.dump(LINCSwitch.opticalJSON, outfile, indent=4, separators=(',', ': '))
+ json.dump(topoJSON, outfile, indent=4, separators=(',', ': '))
info('*** Converting Topology.json to linc-oe format (TopoConfig.json) file (no oecfg) \n')
- topoConfigJson = {};
- dpIdToName = {};
+ topoConfigJson = {}
+ dpIdToName = {}
- topoConfigJson["switchConfig"] = LINCSwitch.getSwitchConfig(dpIdToName);
- topoConfigJson["linkConfig"] = LINCSwitch.getLinkConfig(dpIdToName);
+ topoConfigJson["switchConfig"] = LINCSwitch.getSwitchConfig(dpIdToName)
+ topoConfigJson["linkConfig"] = LINCSwitch.getLinkConfig(dpIdToName)
#Writing to TopoConfig.json
with open( 'TopoConfig.json', 'w' ) as outfile:
@@ -433,7 +442,7 @@ class LINCSwitch(OpticalSwitch):
time = 0
# Set up password authentication
pw_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
- pw_mgr.add_password(None, url, REST_USER, REST_PW)
+ pw_mgr.add_password(None, url, LINCSwitch.restUser, LINCSwitch.restPass)
handler = urllib2.HTTPBasicAuthHandler(pw_mgr)
opener = urllib2.build_opener(handler)
opener.open(url)
@@ -462,7 +471,8 @@ class LINCSwitch(OpticalSwitch):
info('*** Pushing Topology.json to ONOS\n')
for index in range(len(LINCSwitch.controllers)):
- output = quietRun('%s/tools/test/bin/onos-topo-cfg %s Topology.json &' % (LINCSwitch.onosDir, LINCSwitch.controllers[ index ].ip), shell=True)
+ output = quietRun('%s/tools/test/bin/onos-topo-cfg %s Topology.json network/configuration/ &'\
+ % (LINCSwitch.onosDir, LINCSwitch.controllers[ index ].ip), shell=True)
# successful output contains the two characters '{}'
# if there is more output than this, there is an issue
if output.strip('{}'):
@@ -478,6 +488,48 @@ class LINCSwitch(OpticalSwitch):
return nodeDpid[0:-1];
@staticmethod
+ def makeTopoJSON():
+ """
+ Builds ONOS network conifg system compatible dicts to be written as Topology.json file.
+ """
+ topology = {}
+ links = {}
+ devices = {}
+ ports = {}
+
+ for switch in LINCSwitch.opticalJSON[ 'devices' ]:
+ # build device entries - keyed on uri (DPID) and config key 'basic'
+ devDict = {}
+ devDict[ 'driver' ] = switch[ 'hw' ]
+ devDict[ 'mfr' ] = switch[ 'mfr' ]
+ devDict[ 'mac' ] = switch[ 'mac' ]
+ devDict[ 'type' ] = switch[ 'type' ]
+ devDict.update(switch[ 'annotations' ])
+
+ devSubj = switch[ 'uri' ]
+ devices[ devSubj ] = { 'basic': devDict }
+
+ # build port entries - keyed on "uri/port" and config key 'optical'
+ for port in switch[ 'ports' ]:
+ portSubj = devSubj + '/' + str(port[ 'port' ])
+ ports[ portSubj ] = { 'optical': port }
+
+ # build link entries - keyed on "uri/port-uri/port" and config key 'basic'
+ for link in LINCSwitch.opticalJSON[ 'links' ]:
+ linkDict = {}
+ linkDict[ 'type' ] = link[ 'type' ]
+ linkDict.update(link[ 'annotations' ])
+
+ linkSubj = link[ 'src' ] + '-' + link[ 'dst' ]
+ links[ linkSubj ] = { 'basic': linkDict }
+
+ topology[ 'links' ] = links
+ topology[ 'devices' ] = devices
+ topology[ 'ports' ] = ports
+
+ return topology
+
+ @staticmethod
def getSwitchConfig (dpIdToName):
switchConfig = [];
#Iterate through all switches and convert the ROADM switches to linc-oe format
diff --git a/framework/src/onos/utils/jdvue/bin/jdvue b/framework/src/onos/utils/jdvue/bin/jdvue
index 86adfb4f..3dda5969 100755
--- a/framework/src/onos/utils/jdvue/bin/jdvue
+++ b/framework/src/onos/utils/jdvue/bin/jdvue
@@ -8,7 +8,7 @@
JDVUE_ROOT=${JDVUE_ROOT:-$(dirname $0)/..}
cd $JDVUE_ROOT
-VER=1.3.0-SNAPSHOT
+VER=1.4.0-SNAPSHOT
JAR=$PWD/target/jdvue-${VER}.jar # start with the dev jar first
cd - >/dev/null
diff --git a/framework/src/onos/utils/jdvue/pom.xml b/framework/src/onos/utils/jdvue/pom.xml
index 3399a8ab..d1501027 100644
--- a/framework/src/onos/utils/jdvue/pom.xml
+++ b/framework/src/onos/utils/jdvue/pom.xml
@@ -1,5 +1,21 @@
<?xml version="1.0"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+<!--
+ ~ Copyright 2015 Open Networking Laboratory
+ ~
+ ~ 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.
+ -->
+<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>
@@ -9,7 +25,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onlab-utils</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@@ -70,8 +86,10 @@
<version>2.3</version>
<configuration>
<transformers>
- <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
- <mainClass>org.onlab.jdvue.DependencyViewer</mainClass>
+ <transformer
+ implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+ <mainClass>org.onlab.jdvue.DependencyViewer
+ </mainClass>
</transformer>
</transformers>
</configuration>
diff --git a/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/Catalog.java b/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/Catalog.java
index 8f611c52..40cb99a3 100644
--- a/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/Catalog.java
+++ b/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/Catalog.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.jdvue;
diff --git a/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/Dependency.java b/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/Dependency.java
index 7fc3409a..21fae479 100644
--- a/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/Dependency.java
+++ b/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/Dependency.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.jdvue;
import java.util.Objects;
diff --git a/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyCycle.java b/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyCycle.java
index 65e3cfbc..444995bf 100644
--- a/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyCycle.java
+++ b/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyCycle.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.jdvue;
import java.util.ArrayList;
diff --git a/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyViewer.java b/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyViewer.java
index a210d717..32e9ef1c 100644
--- a/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyViewer.java
+++ b/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyViewer.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.jdvue;
import com.fasterxml.jackson.databind.JsonNode;
diff --git a/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/JavaEntity.java b/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/JavaEntity.java
index 31959307..e74bdc60 100644
--- a/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/JavaEntity.java
+++ b/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/JavaEntity.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.jdvue;
import java.util.Objects;
diff --git a/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/JavaPackage.java b/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/JavaPackage.java
index 7bf4be16..a15cb4d3 100644
--- a/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/JavaPackage.java
+++ b/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/JavaPackage.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.jdvue;
import java.util.Collections;
diff --git a/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/JavaSource.java b/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/JavaSource.java
index 8919a13e..1376cfee 100644
--- a/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/JavaSource.java
+++ b/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/JavaSource.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.jdvue;
import java.util.*;
diff --git a/framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/CatalogTest.java b/framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/CatalogTest.java
index 99d22087..b792abcc 100644
--- a/framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/CatalogTest.java
+++ b/framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/CatalogTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.jdvue;
import org.junit.Test;
diff --git a/framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyCycleTest.java b/framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyCycleTest.java
index a0a7c7cb..895c713f 100644
--- a/framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyCycleTest.java
+++ b/framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyCycleTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.jdvue;
import org.junit.Test;
diff --git a/framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyTest.java b/framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyTest.java
index 4dfe9615..94740dae 100644
--- a/framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyTest.java
+++ b/framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.jdvue;
import com.google.common.testing.EqualsTester;
diff --git a/framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyViewerTest.java b/framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyViewerTest.java
index cdac0c24..0937c068 100644
--- a/framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyViewerTest.java
+++ b/framework/src/onos/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyViewerTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.jdvue;
import org.junit.Test;
diff --git a/framework/src/onos/utils/jnc/pom.xml b/framework/src/onos/utils/jnc/pom.xml
index a70bfbe7..6d0f8343 100644
--- a/framework/src/onos/utils/jnc/pom.xml
+++ b/framework/src/onos/utils/jnc/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onlab-utils</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/utils/junit/pom.xml b/framework/src/onos/utils/junit/pom.xml
index 90178346..c9787a41 100644
--- a/framework/src/onos/utils/junit/pom.xml
+++ b/framework/src/onos/utils/junit/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onlab-utils</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/utils/misc/pom.xml b/framework/src/onos/utils/misc/pom.xml
index 17951215..2e721135 100644
--- a/framework/src/onos/utils/misc/pom.xml
+++ b/framework/src/onos/utils/misc/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onlab-utils</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/GAOrganism.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/GAOrganism.java
index 230609f8..a0e0570d 100644
--- a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/GAOrganism.java
+++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/GAOrganism.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.graph;
/**
diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/GAPopulation.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/GAPopulation.java
index ae7f182e..c5fa9b45 100644
--- a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/GAPopulation.java
+++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/GAPopulation.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.graph;
import java.util.ArrayList;
diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/IPv4.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/IPv4.java
index d75b50a2..a5c5f4f1 100644
--- a/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/IPv4.java
+++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/IPv4.java
@@ -35,6 +35,7 @@ public class IPv4 extends BasePacket {
public static final byte PROTOCOL_IGMP = 0x2;
public static final byte PROTOCOL_TCP = 0x6;
public static final byte PROTOCOL_UDP = 0x11;
+ public static final byte PROTOCOL_PIM = 0x67;
public static final Map<Byte, Deserializer<? extends IPacket>> PROTOCOL_DESERIALIZER_MAP =
new HashMap<>();
@@ -43,6 +44,7 @@ public class IPv4 extends BasePacket {
IPv4.PROTOCOL_DESERIALIZER_MAP.put(IPv4.PROTOCOL_IGMP, IGMP.deserializer());
IPv4.PROTOCOL_DESERIALIZER_MAP.put(IPv4.PROTOCOL_TCP, TCP.deserializer());
IPv4.PROTOCOL_DESERIALIZER_MAP.put(IPv4.PROTOCOL_UDP, UDP.deserializer());
+ IPv4.PROTOCOL_DESERIALIZER_MAP.put(IPv4.PROTOCOL_PIM, PIM.deserializer());
}
private static final byte DSCP_MASK = 0x3f;
diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/MPLS.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/MPLS.java
index 47dbeed2..71c5803e 100644
--- a/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/MPLS.java
+++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/MPLS.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.packet;
import java.nio.ByteBuffer;
diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/PIM.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/PIM.java
new file mode 100755
index 00000000..d9a5e83f
--- /dev/null
+++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/PIM.java
@@ -0,0 +1,296 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.packet;
+
+import org.onlab.packet.pim.PIMHello;
+import org.onlab.packet.pim.PIMJoinPrune;
+
+import java.nio.ByteBuffer;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.onlab.packet.PacketUtils.checkInput;
+
+/**
+ * Implements PIM control packet format.
+ */
+public class PIM extends BasePacket {
+
+ public static final IpAddress PIM_ADDRESS = IpAddress.valueOf("224.0.0.13");
+
+ public static final byte TYPE_HELLO = 0x00;
+ public static final byte TYPE_REGISTER = 0x01;
+ public static final byte TYPE_REGISTER_STOP = 0x02;
+ public static final byte TYPE_JOIN_PRUNE_REQUEST = 0x03;
+ public static final byte TYPE_BOOTSTRAP = 0x04;
+ public static final byte TYPE_ASSERT = 0x05;
+ public static final byte TYPE_GRAFT = 0x06;
+ public static final byte TYPE_GRAFT_ACK = 0x07;
+ public static final byte TYPE_CANDIDATE_RP_ADV = 0x08;
+
+ public static final int PIM_HEADER_LEN = 4;
+
+ public static final Map<Byte, Deserializer<? extends IPacket>> PROTOCOL_DESERIALIZER_MAP =
+ new HashMap<>();
+
+ static {
+ PIM.PROTOCOL_DESERIALIZER_MAP.put(PIM.TYPE_HELLO, PIMHello.deserializer());
+ PIM.PROTOCOL_DESERIALIZER_MAP.put(PIM.TYPE_JOIN_PRUNE_REQUEST, PIMJoinPrune.deserializer());
+ }
+
+ /*
+ * PIM Header fields
+ */
+ protected byte version;
+ protected byte type;
+ protected byte reserved;
+ protected short checksum;
+
+ /**
+ * Default constructor.
+ */
+ public PIM() {
+ super();
+ this.version = 2;
+ this.reserved = 0;
+ }
+
+ /**
+ * Return the PIM message type.
+ *
+ * @return the pimMsgType
+ */
+ public byte getPimMsgType() {
+ return this.type;
+ }
+
+ /**
+ * Set the PIM message type. Currently PIMJoinPrune and PIMHello are
+ * supported.
+ *
+ * @param type PIM message type
+ * @return PIM Header
+ */
+ public PIM setPIMType(final byte type) {
+ this.type = type;
+ return this;
+ }
+
+ /**
+ * Get the version of PIM.
+ *
+ * @return the PIM version. Must be 2.
+ */
+ public byte getVersion() {
+ return version;
+ }
+
+ /**
+ * Set the PIM version type. Should not change from 2.
+ *
+ * @param version PIM version
+ */
+ public void setVersion(byte version) {
+ this.version = version;
+ }
+
+ /**
+ * Get the reserved field.
+ *
+ * @return the reserved field. Must be ignored.
+ */
+ public byte getReserved() {
+ return reserved;
+ }
+
+ /**
+ * Set the reserved field.
+ *
+ * @param reserved should be 0
+ */
+ public void setReserved(byte reserved) {
+ this.reserved = reserved;
+ }
+
+ /**
+ * Get the checksum of this packet.
+ *
+ * @return the checksum
+ */
+ public short getChecksum() {
+ return checksum;
+ }
+
+ /**
+ * Set the checksum.
+ *
+ * @param checksum the checksum
+ */
+ public void setChecksum(short checksum) {
+ this.checksum = checksum;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 5807;
+ int result = super.hashCode();
+ result = prime * result + this.type;
+ result = prime * result + this.version;
+ result = prime * result + this.checksum;
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (!super.equals(obj)) {
+ return false;
+ }
+ if (!(obj instanceof PIM)) {
+ return false;
+ }
+ final PIM other = (PIM) obj;
+ if (this.type != other.type) {
+ return false;
+ }
+ if (this.version != other.version) {
+ return false;
+ }
+ if (this.checksum != other.checksum) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Serializes the packet. Will compute and set the following fields if they
+ * are set to specific values at the time serialize is called: -checksum : 0
+ * -length : 0
+ *
+ * @return will return the serialized packet
+ */
+ @Override
+ public byte[] serialize() {
+ int length = 4;
+ byte[] payloadData = null;
+ if (this.payload != null) {
+ this.payload.setParent(this);
+ payloadData = this.payload.serialize();
+ length += payloadData.length;
+ }
+
+ final byte[] data = new byte[length];
+ final ByteBuffer bb = ByteBuffer.wrap(data);
+
+ bb.put((byte) ((this.version & 0xf) << 4 | this.type & 0xf));
+ bb.put(this.reserved);
+ bb.putShort(this.checksum);
+ if (payloadData != null) {
+ bb.put(payloadData);
+ }
+
+ if (this.parent != null && this.parent instanceof PIM) {
+ ((PIM) this.parent).setPIMType(TYPE_JOIN_PRUNE_REQUEST);
+ }
+
+ // compute checksum if needed
+ if (this.checksum == 0) {
+ bb.rewind();
+ int accumulation = 0;
+
+ for (int i = 0; i < length / 2; ++i) {
+ accumulation += 0xffff & bb.getShort();
+ }
+ // pad to an even number of shorts
+ if (length % 2 > 0) {
+ accumulation += (bb.get() & 0xff) << 8;
+ }
+
+ accumulation = (accumulation >> 16 & 0xffff)
+ + (accumulation & 0xffff);
+ this.checksum = (short) (~accumulation & 0xffff);
+ bb.putShort(2, this.checksum);
+ }
+ return data;
+ }
+
+ /**
+ * Deserialize the PIM packet.
+ *
+ * @param data bytes to deserialize.
+ * @param offset offset to start deserializing from
+ * @param length length of the data to deserialize
+ *
+ * @return the deserialized PIM packet.
+ */
+ @Override
+ public IPacket deserialize(final byte[] data, final int offset,
+ final int length) {
+ final ByteBuffer bb = ByteBuffer.wrap(data, offset, length);
+ this.type = bb.get();
+ this.version = bb.get();
+ this.checksum = bb.getShort();
+
+ //this.payload = new Data();
+ this.payload = this.payload.deserialize(data, bb.position(), bb.limit() - bb.position());
+ this.payload.setParent(this);
+ return this;
+ }
+ /**
+ * Deserializer function for IPv4 packets.
+ *
+ * @return deserializer function
+ */
+ public static Deserializer<PIM> deserializer() {
+ return (data, offset, length) -> {
+ checkInput(data, offset, length, PIM_HEADER_LEN);
+
+ PIM pim = new PIM();
+
+ final ByteBuffer bb = ByteBuffer.wrap(data, offset, length);
+
+ byte versionByte = bb.get();
+ pim.version = (byte) (versionByte >> 4 & 0xf);
+ pim.setPIMType((byte) (versionByte & 0xf));
+ pim.reserved = bb.get();
+ pim.checksum = bb.getShort();
+
+ Deserializer<? extends IPacket> deserializer;
+ if (PIM.PROTOCOL_DESERIALIZER_MAP.containsKey(pim.getPimMsgType())) {
+ deserializer = PIM.PROTOCOL_DESERIALIZER_MAP.get(pim.getPimMsgType());
+ } else {
+ deserializer = Data.deserializer();
+ }
+
+ pim.payload = deserializer.deserialize(data, bb.position(), bb.limit() - bb.position());
+ pim.payload.setParent(pim);
+
+ return pim;
+ };
+ }
+}
diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrGroup.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrGroup.java
new file mode 100644
index 00000000..891a0193
--- /dev/null
+++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrGroup.java
@@ -0,0 +1,257 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.packet.pim;
+
+import org.onlab.packet.DeserializationException;
+import org.onlab.packet.Ip4Address;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.IpPrefix;
+import org.onlab.packet.Ip6Address;
+
+import java.nio.ByteBuffer;
+
+import static org.onlab.packet.PacketUtils.checkInput;
+
+public class PIMAddrGroup {
+ private byte family;
+ private byte encType;
+ private byte reserved;
+ private boolean bBit;
+ private boolean zBit;
+ private byte masklen;
+ IpAddress addr;
+
+ public static final int ENC_GROUP_IPV4_BYTE_LENGTH = 4 + Ip4Address.BYTE_LENGTH;
+ public static final int ENC_GROUP_IPV6_BYTE_LENGTH = 4 + Ip6Address.BYTE_LENGTH;
+
+ /**
+ * PIM Encoded Group Address.
+ */
+ public PIMAddrGroup() {
+ this.family = 4;
+ this.encType = 0;
+ this.reserved = 0;
+ this.bBit = false;
+ this.zBit = false;
+ }
+
+ /**
+ * PIM Encoded Source Address.
+ *
+ * @param addr IPv4 or IPv6
+ */
+ public PIMAddrGroup(String addr) {
+ this.setAddr(addr);
+ }
+
+ /**
+ * PIM Encoded Group Address.
+ *
+ * @param gpfx PIM encoded group address.
+ */
+ public PIMAddrGroup(IpPrefix gpfx) {
+ this.setAddr(gpfx);
+ }
+
+ /**
+ * PIM encoded source address.
+ *
+ * @param addr IPv4 or IPv6
+ */
+ public void setAddr(String addr) {
+ setAddr(IpPrefix.valueOf(addr));
+ }
+
+ /**
+ * Set the encoded source address.
+ *
+ * @param pfx address prefix
+ */
+ public void setAddr(IpPrefix pfx) {
+ this.addr = pfx.address();
+ this.masklen = (byte) pfx.prefixLength();
+ this.family = (byte) ((this.addr.isIp4()) ? 4 : 6);
+ }
+
+ /**
+ * Get the IP family of this address: 4 or 6.
+ *
+ * @return the IP address family
+ */
+ public int getFamily() {
+ return this.family;
+ }
+
+ /**
+ * Get the address of this encoded address.
+ *
+ * @return source address
+ */
+ public IpAddress getAddr() {
+ return this.addr;
+ }
+
+ /**
+ * Get the masklen of the group address.
+ *
+ * @return the masklen
+ */
+ public int getMasklen() {
+ return this.masklen;
+ }
+
+ /**
+ * Return the z bit for admin scoping. Only used for the Bootstrap router.
+ *
+ * @return true or false
+ */
+ public boolean getZBit() {
+ return this.zBit;
+ }
+
+ /**
+ * Return the bBit. Used to indicate this is a bidir
+ *
+ * @return return true or false.
+ */
+ public boolean getBBit() {
+ return this.bBit;
+ }
+
+ /**
+ * The size in bytes of a serialized address.
+ *
+ * @return the number of bytes when serialized
+ */
+ public int getByteSize() {
+ int size = 4;
+ size += addr.isIp4() ? 4 : 16;
+ return size;
+ }
+
+ /**
+ * Serialize this group address.
+ *
+ * @return the serialized address in a buffer
+ */
+ public byte[] serialize() {
+ int len = getByteSize();
+
+ final byte[] data = new byte[len];
+ final ByteBuffer bb = ByteBuffer.wrap(data);
+
+ bb.put(this.family);
+ bb.put(this.encType);
+
+ // Todo: technically we should be setting the B and Z bits, but we'll never use them.
+ bb.put(reserved);
+
+ bb.put(this.masklen);
+ bb.put(this.addr.toOctets());
+ return data;
+ }
+
+ /**
+ * Deserialze from a ByteBuffer.
+ *
+ * @param bb the ByteBuffer
+ * @return an encoded PIM group address
+ * @throws DeserializationException if unable to deserialize the packet data
+ */
+ public PIMAddrGroup deserialize(ByteBuffer bb) throws DeserializationException {
+
+ /*
+ * We need to verify that we have enough buffer space. First we'll assume that
+ * we are decoding an IPv4 address. After we read the first by (address family),
+ * we'll determine if we actually need more buffer space for an IPv6 address.
+ */
+ checkInput(bb.array(), bb.position(), bb.limit() - bb.position(), ENC_GROUP_IPV4_BYTE_LENGTH);
+
+ this.family = bb.get();
+ if (family != 4 && family != 6) {
+ throw new DeserializationException("Illegal IP version number: " + family + "\n");
+ } else if (family == 6) {
+
+ // Check for one less by since we have already read the first byte of the packet.
+ checkInput(bb.array(), bb.position(), bb.limit() - bb.position(), ENC_GROUP_IPV6_BYTE_LENGTH - 1);
+ }
+
+ this.encType = bb.get();
+ this.reserved = bb.get();
+ if ((this.reserved & 0x80) != 0) {
+ this.bBit = true;
+ }
+ if ((this.reserved & 0x01) != 0) {
+ this.zBit = true;
+ }
+ // Remove the z and b bits from reserved
+ this.reserved |= 0x7d;
+
+ this.masklen = bb.get();
+ if (this.family == 4) {
+ this.addr = IpAddress.valueOf(bb.getInt());
+ } else if (this.family == 6) {
+ this.addr = Ip6Address.valueOf(bb.array(), 2);
+ }
+ return this;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 2521;
+ int result = super.hashCode();
+ result = prime * result + this.family;
+ result = prime * result + this.encType;
+ result = prime * result + this.reserved;
+ result = prime * result + this.masklen;
+ result = prime * result + this.addr.hashCode();
+ return result;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals()
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (!(obj instanceof PIMAddrGroup)) {
+ return false;
+ }
+ final PIMAddrGroup other = (PIMAddrGroup) obj;
+ if (this.family != this.family) {
+ return false;
+ }
+
+ if (this.encType != other.encType) {
+ return false;
+ }
+
+ if (!this.addr.equals(other.addr)) {
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrSource.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrSource.java
new file mode 100644
index 00000000..2d4a7816
--- /dev/null
+++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrSource.java
@@ -0,0 +1,281 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.packet.pim;
+
+import org.onlab.packet.DeserializationException;
+import org.onlab.packet.Ip4Address;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.IpPrefix;
+import org.onlab.packet.Ip6Address;
+
+import java.nio.ByteBuffer;
+
+import static org.onlab.packet.PacketUtils.checkInput;
+
+public class PIMAddrSource {
+ private byte family;
+ private byte encType;
+ private byte reserved;
+ private boolean sBit;
+ private boolean wBit;
+ private boolean rBit;
+ private byte masklen;
+ IpAddress addr;
+
+ public static final int ENC_SOURCE_IPV4_BYTE_LENGTH = 4 + Ip4Address.BYTE_LENGTH;
+ public static final int ENC_SOURCE_IPV6_BYTE_LENGTH = 4 + Ip6Address.BYTE_LENGTH;
+
+ /**
+ * PIM Encoded Source Address.
+ *
+ * @param addr IPv4 or IPv6
+ */
+ public PIMAddrSource(String addr) {
+ this.init();
+ this.setAddr(addr);
+ }
+
+ /**
+ * PIM Encoded Source Address.
+ *
+ * @param spfx IPv4 or IPv6
+ */
+ public PIMAddrSource(IpPrefix spfx) {
+ this.init();
+ this.setAddr(spfx);
+ }
+
+ /**
+ * PIM Encoded Group Address.
+ */
+ public PIMAddrSource() {
+ this.init();
+ }
+
+ private void init() {
+ this.family = 4;
+ this.encType = 0;
+ this.reserved = 0;
+ this.sBit = true;
+ this.wBit = false;
+ this.rBit = false;
+ }
+
+ /**
+ * PIM Encoded Source Address.
+ *
+ * @param addr IPv4 or IPv6
+ */
+ public void setAddr(String addr) {
+ IpPrefix spfx = IpPrefix.valueOf(addr);
+ setAddr(spfx);
+ }
+
+ /**
+ * PIM Encoded Source Address.
+ *
+ * @param spfx IPv4 or IPv6 address prefix
+ */
+ public void setAddr(IpPrefix spfx) {
+ this.addr = spfx.address();
+ this.masklen = (byte) spfx.prefixLength();
+ this.family = (byte) ((this.addr.isIp4()) ? 4 : 6);
+ }
+
+ /**
+ * Get the IP family of this address: 4 or 6.
+ *
+ * @return the IP address family
+ */
+ public byte getFamily() {
+ return this.family;
+ }
+
+ /**
+ * Get the address of this encoded address.
+ *
+ * @return source address
+ */
+ public IpAddress getAddr() {
+ return this.addr;
+ }
+
+ /**
+ * Get the masklen of the group address.
+ *
+ * @return the masklen
+ */
+ public int getMasklen() {
+ return this.masklen;
+ }
+
+ /**
+ * Return the sparse bit.
+ *
+ * @return true or false
+ */
+ public boolean getSBit() {
+ return this.sBit;
+ }
+
+ /**
+ * Return the wBit, used in Join/Prune messages.
+ *
+ * @return return true or false.
+ */
+ public boolean getWBit() {
+ return this.wBit;
+ }
+
+ /**
+ * Return the rBit. Used by Rendezvous Point.
+ *
+ * @return the rBit.
+ */
+ public boolean getRBit() {
+ return this.rBit;
+ }
+
+ /**
+ * The size in bytes of a serialized address.
+ *
+ * @return the number of bytes when serialized
+ */
+ public int getByteSize() {
+ int size = 4;
+ size += addr.isIp4() ? 4 : 16;
+ return size;
+ }
+
+ public byte[] serialize() {
+ int len = addr.isIp4() ? ENC_SOURCE_IPV4_BYTE_LENGTH : ENC_SOURCE_IPV6_BYTE_LENGTH;
+
+ final byte[] data = new byte[len];
+ final ByteBuffer bb = ByteBuffer.wrap(data);
+
+ bb.put(this.family);
+ bb.put(this.encType);
+
+ // Todo: technically we should be setting the B and Z bits, but we'll never use them.
+ byte mask = 0x0;
+ if (this.sBit) {
+ this.reserved |= 0x4;
+ }
+ if (this.wBit) {
+ this.reserved |= 0x2;
+ }
+ if (this.rBit) {
+ this.reserved |= 0x1;
+ }
+ bb.put(reserved);
+
+ bb.put(this.masklen);
+ bb.put(this.addr.toOctets());
+ return data;
+ }
+
+ public PIMAddrSource deserialize(byte[] data, int offset, int length) throws DeserializationException {
+ final ByteBuffer bb = ByteBuffer.wrap(data, offset, length);
+ return deserialize(bb);
+ }
+
+ public PIMAddrSource deserialize(ByteBuffer bb) throws DeserializationException {
+
+ /*
+ * We need to verify that we have enough buffer space. First we'll assume that
+ * we are decoding an IPv4 address. After we read the first by (address family),
+ * we'll determine if we actually need more buffer space for an IPv6 address.
+ */
+ checkInput(bb.array(), bb.position(), bb.limit() - bb.position(), ENC_SOURCE_IPV4_BYTE_LENGTH);
+
+ this.family = bb.get();
+ if (family != 4 && family != 6) {
+ throw new DeserializationException("Illegal IP version number: " + family + "\n");
+ } else if (family == 6) {
+
+ // Check for one less by since we have already read the first byte of the packet.
+ checkInput(bb.array(), bb.position(), bb.limit() - bb.position(), ENC_SOURCE_IPV6_BYTE_LENGTH - 1);
+ }
+
+ this.encType = bb.get();
+ this.reserved = bb.get();
+ if ((this.reserved & 0x01) != 0) {
+ this.rBit = true;
+ }
+ if ((this.reserved & 0x02) != 0) {
+ this.wBit = true;
+ }
+ if ((this.reserved & 0x4) != 0) {
+ this.sBit = true;
+ }
+
+ // Remove the s, reserved
+ this.reserved &= 0xf8;
+
+ this.masklen = bb.get();
+ if (this.family == 4) {
+ this.addr = IpAddress.valueOf(bb.getInt());
+ } else if (this.family == 6) {
+ this.addr = Ip6Address.valueOf(bb.array(), 2);
+ }
+ return this;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 2521;
+ int result = super.hashCode();
+ result = prime * result + this.family;
+ result = prime * result + this.encType;
+ result = prime * result + this.reserved;
+ result = prime * result + this.masklen;
+ result = prime * result + this.addr.hashCode();
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (!(obj instanceof PIMAddrSource)) {
+ return false;
+ }
+ final PIMAddrSource other = (PIMAddrSource) obj;
+ if (this.family != this.family) {
+ return false;
+ }
+
+ if (this.encType != other.encType) {
+ return false;
+ }
+
+ if (!this.addr.equals(other.addr)) {
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrUnicast.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrUnicast.java
new file mode 100644
index 00000000..0c2d676b
--- /dev/null
+++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrUnicast.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.packet.pim;
+
+import org.onlab.packet.DeserializationException;
+import org.onlab.packet.Ip4Address;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.Ip6Address;
+
+import java.nio.ByteBuffer;
+
+import static org.onlab.packet.PacketUtils.checkInput;
+
+public class PIMAddrUnicast {
+ private byte family;
+ private byte encType;
+ IpAddress addr;
+
+ public static final int ENC_UNICAST_IPV4_BYTE_LENGTH = 2 + Ip4Address.BYTE_LENGTH;
+ public static final int ENC_UNICAST_IPV6_BYTE_LENGTH = 2 + Ip6Address.BYTE_LENGTH;
+
+ /**
+ * PIM Encoded Source Address.
+ */
+ public PIMAddrUnicast() {
+ this.family = 4;
+ this.encType = 0;
+ }
+
+ /**
+ * PIM Encoded Source Address.
+ *
+ * @param addr IPv4 or IPv6
+ */
+ public PIMAddrUnicast(String addr) {
+ this.addr = IpAddress.valueOf(addr);
+ if (this.addr.isIp4()) {
+ this.family = 4;
+ } else {
+ this.family = 6;
+ }
+ this.encType = 0;
+ }
+
+ /**
+ * PIM Encoded Source Address.
+ *
+ * @param addr IPv4 or IPv6
+ */
+ public void setAddr(IpAddress addr) {
+ this.addr = addr;
+ if (this.addr.isIp4()) {
+ this.family = 4;
+ } else {
+ this.family = 6;
+ }
+ }
+
+ /**
+ * Get the address of this encoded address.
+ *
+ * @return source address
+ */
+ public IpAddress getAddr() {
+ return this.addr;
+ }
+
+ /**
+ * Get the IP family of this address: 4 or 6.
+ *
+ * @return the IP address family
+ */
+ public int getFamily() {
+ return this.family;
+ }
+
+ /**
+ * The size in bytes of a serialized address.
+ *
+ * @return the number of bytes when serialized
+ */
+ public int getByteSize() {
+ int size = 2;
+ if (addr != null) {
+ size += addr.isIp4() ? 4 : 16;
+ } else {
+ size += 4;
+ }
+ return size;
+ }
+
+ public byte[] serialize() {
+ int len = getByteSize();
+
+ final byte[] data = new byte[len];
+ final ByteBuffer bb = ByteBuffer.wrap(data);
+
+ bb.put(family);
+ bb.put(encType);
+ bb.put(addr.toOctets());
+ return data;
+ }
+
+ public PIMAddrUnicast deserialize(ByteBuffer bb) throws DeserializationException {
+
+ // Assume IPv4 for check length until we read the encoded family.
+ checkInput(bb.array(), bb.position(), bb.limit() - bb.position(), ENC_UNICAST_IPV4_BYTE_LENGTH);
+ this.family = bb.get();
+
+ // If we have IPv6 we need to ensure we have adequate buffer space.
+ if (this.family != 4 && this.family != 6) {
+ throw new DeserializationException("Invalid address family: " + this.family);
+ } else if (this.family == 6) {
+ // Subtract -1 from ENC_UNICAST_IPv6 BYTE_LENGTH because we read one byte for family previously.
+ checkInput(bb.array(), bb.position(), bb.limit() - bb.position(), ENC_UNICAST_IPV6_BYTE_LENGTH - 1);
+ }
+
+ this.encType = bb.get();
+ if (this.family == 4) {
+ this.addr = IpAddress.valueOf(bb.getInt());
+ } else if (this.family == 6) {
+ this.addr = Ip6Address.valueOf(bb.array(), 2);
+ }
+ return this;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 2521;
+ int result = super.hashCode();
+ result = prime * result + this.family;
+ result = prime * result + this.encType;
+ result = prime * result + this.addr.hashCode();
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (!(obj instanceof PIMAddrUnicast)) {
+ return false;
+ }
+ final PIMAddrUnicast other = (PIMAddrUnicast) obj;
+ if (this.family != this.family) {
+ return false;
+ }
+
+ if (this.encType != other.encType) {
+ return false;
+ }
+
+ if (!this.addr.equals(other.addr)) {
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMHello.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMHello.java
new file mode 100644
index 00000000..9ad3fdbd
--- /dev/null
+++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMHello.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.packet.pim;
+
+import org.onlab.packet.BasePacket;
+import org.onlab.packet.Deserializer;
+import org.onlab.packet.IPacket;
+import org.onlab.packet.IpAddress;
+import java.nio.ByteBuffer;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.onlab.packet.PacketUtils.checkInput;
+
+public class PIMHello extends BasePacket {
+
+ private IpAddress nbrIpAddress;
+ private boolean priorityPresent = false;
+
+ private Map<Short, PIMHelloOption> options = new HashMap<>();
+
+ /**
+ * Create a PIM Hello packet with the most common hello options and default
+ * values. The values of any options can be easily changed by modifying the value of
+ * the option with the desired change.
+ */
+ public void createDefaultOptions() {
+ options.put(PIMHelloOption.OPT_HOLDTIME, new PIMHelloOption(PIMHelloOption.OPT_HOLDTIME));
+ options.put(PIMHelloOption.OPT_PRIORITY, new PIMHelloOption(PIMHelloOption.OPT_PRIORITY));
+ options.put(PIMHelloOption.OPT_GENID, new PIMHelloOption(PIMHelloOption.OPT_GENID));
+ }
+
+ /**
+ * Add a PIM Hello option to this hello message. Note
+ *
+ * @param opt the PIM Hello option we are adding
+ */
+ public void addOption(PIMHelloOption opt) {
+ this.options.put(opt.getOptType(), opt);
+ }
+
+ public Map<Short, PIMHelloOption> getOptions() {
+ return this.options;
+ }
+
+ /**
+ * Sets all payloads parent packet if applicable, then serializes this
+ * packet and all payloads.
+ *
+ * @return a byte[] containing this packet and payloads
+ */
+ @Override
+ public byte[] serialize() {
+ int totalLen = 0;
+
+
+ // Since we are likely to only have 3-4 options, go head and walk the
+ // hashmap twice, once to calculate the space needed to allocate a
+ // buffer, the second time serialize the options into the buffer. This
+ // saves us from allocating an over sized buffer the re-allocating and
+ // copying.
+ for (Short optType : options.keySet()) {
+ PIMHelloOption opt = options.get(optType);
+ totalLen += PIMHelloOption.MINIMUM_OPTION_LEN_BYTES + opt.getOptLength();
+ }
+
+ byte[] data = new byte[totalLen];
+ ByteBuffer bb = ByteBuffer.wrap(data);
+
+ // Now serialize the data.
+ for (Short optType : options.keySet()) {
+ PIMHelloOption opt = options.get(optType);
+ bb.put(opt.serialize());
+ }
+ return data;
+ }
+
+ /**
+ * XXX: This is deprecated, DO NOT USE, use the deserializer() function instead.
+ */
+ public IPacket deserialize(final byte[] data, final int offset,
+ final int length) {
+ // TODO: throw an expection?
+ return null;
+ }
+
+ /**
+ * Deserialize this hello message.
+ *
+ * @return a deserialized hello message
+ */
+ public static Deserializer<PIMHello> deserializer() {
+ return (data, offset, length) -> {
+ checkInput(data, offset, length, PIMHelloOption.MINIMUM_OPTION_LEN_BYTES);
+ final ByteBuffer bb = ByteBuffer.wrap(data, offset, length);
+
+ PIMHello hello = new PIMHello();
+ while (bb.hasRemaining()) {
+ PIMHelloOption opt = PIMHelloOption.deserialize(bb);
+ hello.addOption(opt);
+ }
+ return hello;
+ };
+ }
+}
diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMHelloOption.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMHelloOption.java
new file mode 100644
index 00000000..bf021fbd
--- /dev/null
+++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMHelloOption.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.packet.pim;
+
+import org.onlab.packet.DeserializationException;
+
+import java.nio.ByteBuffer;
+import java.text.MessageFormat;
+
+import static org.onlab.packet.PacketUtils.checkBufferLength;
+import static org.onlab.packet.PacketUtils.checkInput;
+
+public class PIMHelloOption {
+
+ /**
+ * PIM Option types.
+ */
+ public static final short OPT_HOLDTIME = 1;
+ public static final short OPT_PRUNEDELAY = 2;
+ public static final short OPT_PRIORITY = 19;
+ public static final short OPT_GENID = 20;
+ public static final short OPT_ADDRLIST = 24;
+
+ public static final short DEFAULT_HOLDTIME = 105;
+ public static final int DEFAULT_PRUNEDELAY = 2000; // 2,000 ms
+ public static final int DEFAULT_PRIORITY = 1;
+ public static final int DEFAULT_GENID = 0;
+
+ public static final int MINIMUM_OPTION_LEN_BYTES = 4;
+
+ // Values for this particular hello option.
+ private short optType;
+ private short optLength;
+ private byte[] optValue;
+
+ public PIMHelloOption() {
+ }
+
+ /**
+ * Set a PIM Hello option by type. The length and default value of the
+ * type will be auto filled in by default.
+ *
+ * @param type hello option type
+ */
+ public PIMHelloOption(short type) {
+ this.optType = type;
+ switch (type) {
+ case OPT_HOLDTIME:
+ this.optLength = 2;
+ this.optValue = new byte[optLength];
+ ByteBuffer.wrap(this.optValue).putShort(PIMHelloOption.DEFAULT_HOLDTIME);
+ break;
+
+ case OPT_PRUNEDELAY:
+ this.optLength = 4;
+ this.optValue = new byte[this.optLength];
+ ByteBuffer.wrap(this.optValue).putInt(PIMHelloOption.DEFAULT_PRUNEDELAY);
+ break;
+
+ case OPT_PRIORITY:
+ this.optLength = 4;
+ this.optValue = new byte[this.optLength];
+ ByteBuffer.wrap(this.optValue).putInt(PIMHelloOption.DEFAULT_PRIORITY);
+ break;
+
+ case OPT_GENID:
+ this.optLength = 4;
+ this.optValue = new byte[this.optLength];
+ ByteBuffer.wrap(this.optValue).putInt(PIMHelloOption.DEFAULT_GENID);
+ break;
+
+ case OPT_ADDRLIST:
+ this.optLength = 0; // We don't know what the length will be yet.
+ this.optValue = null;
+
+ default:
+ //log.error("Unkown option type: " + type + "\n" );
+ return;
+ }
+ }
+
+ public void setOptType(short type) {
+ this.optType = type;
+ }
+
+ public short getOptType() {
+ return this.optType;
+ }
+
+ public void setOptLength(short len) {
+ this.optLength = len;
+ }
+
+ public short getOptLength() {
+ return this.optLength;
+ }
+
+ public void setValue(ByteBuffer bb) throws DeserializationException {
+ this.optValue = new byte[this.optLength];
+ bb.get(this.optValue, 0, this.optLength);
+ }
+
+ public byte[] getValue() {
+ return this.optValue;
+ }
+
+ public static PIMHelloOption deserialize(ByteBuffer bb) throws DeserializationException {
+ checkInput(bb.array(), bb.position(), bb.limit() - bb.position(), 4);
+
+ PIMHelloOption opt = new PIMHelloOption();
+ opt.setOptType(bb.getShort());
+ opt.setOptLength(bb.getShort());
+
+ checkBufferLength(bb.limit(), bb.position(), opt.getOptLength());
+ opt.setValue(bb);
+
+ return opt;
+ }
+
+ public byte [] serialize() {
+ int len = 4 + this.optLength;
+ ByteBuffer bb = ByteBuffer.allocate(len);
+ bb.putShort(this.optType);
+ bb.putShort(this.optLength);
+ bb.put(this.optValue);
+ return bb.array();
+ }
+
+ public String toString() {
+ return MessageFormat.format("Type: {0}, len: {1} value: {2}", this.optType, this.optLength,
+ (this.optValue == null) ? "null" : this.optValue.toString());
+ }
+
+}
diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMJoinPrune.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMJoinPrune.java
new file mode 100644
index 00000000..9653115b
--- /dev/null
+++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/PIMJoinPrune.java
@@ -0,0 +1,271 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.packet.pim;
+
+import org.onlab.packet.BasePacket;
+import org.onlab.packet.Deserializer;
+import org.onlab.packet.IPacket;
+import org.onlab.packet.IpPrefix;
+
+import java.nio.ByteBuffer;
+import java.util.HashMap;
+
+import static org.onlab.packet.PacketUtils.checkInput;
+
+public class PIMJoinPrune extends BasePacket {
+
+ private PIMAddrUnicast upstreamAddr = new PIMAddrUnicast();
+ private short holdTime = (short) 0xffff;
+
+ private class JoinPruneGroup {
+ protected IpPrefix group;
+ protected HashMap<IpPrefix, IpPrefix> joins = new HashMap<>();
+ protected HashMap<IpPrefix, IpPrefix> prunes = new HashMap<>();
+
+ public JoinPruneGroup(IpPrefix grp) {
+ group = grp;
+ }
+ }
+ private HashMap<IpPrefix, JoinPruneGroup> joinPrunes = new HashMap<>();
+
+ /**
+ * Get the J/P hold time.
+ *
+ * @return specified in seconds.
+ */
+ public short getHoldTime() {
+ return holdTime;
+ }
+
+ /**
+ * Set the J/P holdtime in seconds.
+ *
+ * @param holdTime return the holdtime.
+ */
+ public void setHoldTime(short holdTime) {
+ this.holdTime = holdTime;
+ }
+
+ /**
+ * Get the upstreamAddr for this J/P request.
+ *
+ * @return the upstream address.
+ */
+ public PIMAddrUnicast getUpstreamAddr() {
+ return upstreamAddr;
+ }
+
+ /**
+ * Set the upstream address of this PIM J/P request.
+ *
+ * @param upstr the PIM Upstream unicast address
+ */
+ public void setUpstreamAddr(PIMAddrUnicast upstr) {
+ this.upstreamAddr = upstr;
+ }
+
+ /**
+ * Add the specified s,g to join field.
+ *
+ * @param saddr the source address of the route
+ * @param gaddr the group address of the route
+ * @param join true for a join, false for a prune.
+ */
+ public void addJoinPrune(String saddr, String gaddr, boolean join) {
+ IpPrefix gpfx = IpPrefix.valueOf(gaddr);
+ IpPrefix spfx = IpPrefix.valueOf(saddr);
+ addJoinPrune(spfx, gpfx, join);
+ }
+
+ /**
+ * Add the specified S, G to the join field.
+ *
+ * @param spfx the source prefix of the route
+ * @param gpfx the group prefix of the route
+ * @param join true for join, false for prune
+ */
+ public void addJoinPrune(IpPrefix spfx, IpPrefix gpfx, boolean join) {
+ JoinPruneGroup jpg = joinPrunes.get(gpfx);
+ if (jpg == null) {
+ jpg = new JoinPruneGroup(gpfx);
+ joinPrunes.put(gpfx, jpg);
+ }
+
+ HashMap<IpPrefix, IpPrefix> members = (join) ? jpg.joins : jpg.prunes;
+ if (members.get(spfx) == null) {
+ members.put(spfx, spfx);
+ }
+ }
+
+ /**
+ * Add a join given strings represending the source and group addresses.
+ *
+ * @param saddr source address
+ * @param gaddr group address
+ */
+ public void addJoin(String saddr, String gaddr) {
+ this.addJoinPrune(saddr, gaddr, true);
+ }
+
+ /**
+ * Add a prune given strings represending the source and group addresses.
+ *
+ * @param saddr source address
+ * @param gaddr group address
+ */
+ public void addPrune(String saddr, String gaddr) {
+ this.addJoinPrune(saddr, gaddr, false);
+ }
+
+ /**
+ * Sets all payloads parent packet if applicable, then serializes this
+ * packet and all payloads.
+ *
+ * @return a byte[] containing this packet and payloads
+ */
+ @Override
+ public byte[] serialize() {
+
+ byte[] data = new byte[8096]; // Come up with something better
+ ByteBuffer bb = ByteBuffer.wrap(data);
+
+ bb.put(upstreamAddr.serialize());
+ bb.put((byte) 0); // reserved
+
+ int ngrps = joinPrunes.size();
+ bb.put((byte) ngrps);
+ bb.putShort(this.holdTime);
+
+ // Walk the group list and input all groups
+ for (JoinPruneGroup jpg : joinPrunes.values()) {
+ PIMAddrGroup grp = new PIMAddrGroup(jpg.group);
+ bb.put(grp.serialize());
+
+ // put the number of joins and prunes
+ bb.putShort((short) jpg.joins.size());
+ bb.putShort((short) jpg.prunes.size());
+
+ // Set all of the joins
+ for (IpPrefix spfx : jpg.joins.values()) {
+ PIMAddrSource src = new PIMAddrSource(spfx);
+ bb.put(src.serialize());
+ }
+
+ // Set all of the prunes
+ for (IpPrefix spfx : jpg.prunes.values()) {
+ PIMAddrSource src = new PIMAddrSource(spfx);
+ bb.put(src.serialize());
+ }
+ }
+
+ int len = bb.position();
+ byte[] data2 = new byte[len];
+ bb = ByteBuffer.wrap(data2, 0, len);
+ bb.put(data, 0, len);
+ return data2;
+ }
+
+ // TODO: I suppose I really need to implement this?
+ @Override
+ public IPacket deserialize(final byte[] data, final int offset,
+ final int length) {
+ final ByteBuffer bb = ByteBuffer.wrap(data, offset, length);
+ return this;
+ }
+
+ /**
+ * Return the J/P deserializer function.
+ *
+ * @return a function that will deserialize a J/P message.
+ */
+ public static Deserializer<PIMJoinPrune> deserializer() {
+ return (data, offset, length) -> {
+
+ /*
+ * Delay buffer checks until we read enough of the packet to know how
+ * much data we will require. Each encoded address deserializer function
+ * will ensure there is enough data for that address.
+ */
+ PIMJoinPrune jp = new PIMJoinPrune();
+ final ByteBuffer bb = ByteBuffer.wrap(data, offset, length);
+
+ // We must get a PIM encoded unicast address
+ PIMAddrUnicast upstream = new PIMAddrUnicast();
+ upstream.deserialize(bb);
+ jp.setUpstreamAddr(upstream);
+
+ // Use this boolean to determine the buffer space we need according to address sizes
+ boolean ipv4 = upstream.getAddr().isIp4();
+
+ // We need at minimum 4 bytes for reserved(1), ngroups(1) & holdtime(2)
+ checkInput(bb.array(), bb.position(), bb.limit() - bb.position(), 4);
+
+ // get and skip the reserved byte
+ bb.get();
+
+ // Get the number of groups.
+ int ngroups = bb.get();
+
+ // Save the holdtime.
+ jp.setHoldTime(bb.getShort());
+
+
+ for (int i = 0; i < ngroups; i++) {
+ PIMAddrGroup grp = new PIMAddrGroup();
+
+ /*
+ * grp.deserialize will ensure the buffer has enough data to read the group address.
+ */
+ grp.deserialize(bb);
+
+ checkInput(bb.array(), bb.position(), bb.limit() - bb.position(), 4);
+ int njoins = bb.getShort();
+ int nprunes = bb.getShort();
+
+ /*
+ * Now we'll verify we have enough buffer to read the next
+ * group of join and prune addresses for this group.
+ */
+ int required = (njoins + nprunes) *
+ (ipv4 ? PIMAddrSource.ENC_SOURCE_IPV4_BYTE_LENGTH : PIMAddrSource.ENC_SOURCE_IPV6_BYTE_LENGTH);
+ checkInput(bb.array(), bb.position(), bb.limit() - bb.position(), required);
+
+ // Now iterate through the joins for this group
+ for (; njoins > 0; njoins--) {
+
+ PIMAddrSource src = new PIMAddrSource();
+ src.deserialize(bb);
+
+ jp.addJoinPrune(
+ src.getAddr().toIpPrefix(),
+ grp.getAddr().toIpPrefix(), true);
+ }
+
+ // Now iterate through the prunes for this group
+ for (; nprunes > 0; nprunes--) {
+
+ PIMAddrSource src = new PIMAddrSource();
+ src.deserialize(bb);
+ jp.addJoinPrune(
+ src.getAddr().toIpPrefix(),
+ grp.getAddr().toIpPrefix(), false);
+ }
+ }
+
+ return jp;
+ };
+ }
+}
diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/package-info.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/package-info.java
new file mode 100755
index 00000000..88a1ad5d
--- /dev/null
+++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/pim/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2014-2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Utilities for managing PIM packets.
+ */
+package org.onlab.packet.pim;
+
diff --git a/framework/src/onos/utils/misc/src/test/java/org/onlab/packet/PIMTest.java b/framework/src/onos/utils/misc/src/test/java/org/onlab/packet/PIMTest.java
new file mode 100644
index 00000000..7fba3cd7
--- /dev/null
+++ b/framework/src/onos/utils/misc/src/test/java/org/onlab/packet/PIMTest.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.packet;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onlab.packet.pim.PIMAddrUnicast;
+import org.onlab.packet.pim.PIMHello;
+import org.onlab.packet.pim.PIMJoinPrune;
+
+import static junit.framework.Assert.assertTrue;
+
+public final class PIMTest {
+
+ public static final String SADDR = "10.2.1.2";
+ public static final String PIMADDR = "224.0.0.13";
+ public static final String PIMUADDR = "10.23.3.5";
+
+ public static final String SADDR1 = "10.1.1.1/32";
+ public static final String SADDR2 = "10.1.2.1/32";
+ public static final String GADDR1 = "232.1.1.1/32";
+ public static final String GADDR2 = "232.1.2.1/32";
+
+ public static final String CPSTR1 = "of:deadbeefball/8";
+ public static final String CPSTR2 = "of:deadbeefcafe/3";
+ public static final String CPSTR3 = "of:2badcafef00d/3";
+
+ private Deserializer<PIM> deserializer;
+
+ private PIM pimHello;
+ private PIMHello hello;
+
+ private PIM pimJoinPrune;
+ private PIMJoinPrune joinPrune;
+
+ /**
+ * Create PIM Hello and Join/Prune packets to be used in testing.
+ *
+ * @throws Exception if packet creation fails
+ */
+ @Before
+ public void setUp() throws Exception {
+
+ // Create a PIM Hello
+ pimHello = new PIM();
+ pimHello.setVersion((byte) 2);
+ pimHello.setPIMType((byte) PIM.TYPE_HELLO);
+ pimHello.setChecksum((short) 0);
+
+ hello = new PIMHello();
+ hello.createDefaultOptions();
+ pimHello.setPayload(hello);
+ hello.setParent(pimHello);
+
+ // Create PIM Join Prune
+ pimJoinPrune = new PIM();
+ pimJoinPrune.setVersion((byte) 2);
+ pimJoinPrune.setPIMType((byte) PIM.TYPE_JOIN_PRUNE_REQUEST);
+ pimJoinPrune.setChecksum((short) 0);
+
+ joinPrune = new PIMJoinPrune();
+ joinPrune.setUpstreamAddr(new PIMAddrUnicast(SADDR));
+ joinPrune.addJoin(GADDR1, SADDR1);
+ joinPrune.addJoin(GADDR2, SADDR2);
+ joinPrune.addPrune(GADDR1, SADDR2);
+ joinPrune.addPrune(GADDR2, SADDR1);
+
+ pimJoinPrune.setPayload(joinPrune);
+ joinPrune.setParent(pimJoinPrune);
+
+ deserializer = PIM.deserializer();
+ }
+
+ /**
+ * Make sure our deserializer throws an exception if we recieve bad input.
+ *
+ * @throws Exception if we are given bad input.
+ */
+ @Test
+ public void testDeserializeBadInput() throws Exception {
+ PacketTestUtils.testDeserializeBadInput(deserializer);
+ }
+
+ /**
+ * Verify we throw an exception if we receive a truncated Join/Prune message.
+ *
+ * @throws Exception if we receive a truncated Join/Prune message.
+ */
+ @Test
+ public void testDeserializeTruncated() throws Exception {
+ byte [] bits = pimJoinPrune.serialize();
+ PacketTestUtils.testDeserializeTruncated(deserializer, bits);
+ }
+
+ /**
+ * Verify that we correctly deserialize hello messages.
+ *
+ * @throws Exception if our input is bad or truncated.
+ */
+ @Test
+ public void testDeserializeHello() throws Exception {
+ byte [] data = pimHello.serialize();
+ PIM pim = deserializer.deserialize(data, 0, data.length);
+ assertTrue(pim.equals(pimHello));
+ }
+
+ /**
+ * Verify that we correctly deserialize Join/Prune messages.
+ *
+ * @throws Exception if our input is bad or truncated.
+ */
+ @Test
+ public void testDeserializeJoinPrune() throws Exception {
+ byte [] data = pimJoinPrune.serialize();
+ PIM pim = deserializer.deserialize(data, 0, data.length);
+ assertTrue(pim.equals(pimJoinPrune));
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/onos/utils/misc/src/test/java/org/onlab/util/HexStringTest.java b/framework/src/onos/utils/misc/src/test/java/org/onlab/util/HexStringTest.java
index 27652123..e04e29a2 100644
--- a/framework/src/onos/utils/misc/src/test/java/org/onlab/util/HexStringTest.java
+++ b/framework/src/onos/utils/misc/src/test/java/org/onlab/util/HexStringTest.java
@@ -21,12 +21,14 @@ import com.esotericsoftware.minlog.Log;
import junit.framework.TestCase;
+import static org.junit.Assert.fail;
+
/**
* Test of the Hexstring.
*
*/
-public class HexStringTest extends TestCase {
+public class HexStringTest {
@Test
public void testMarshalling() throws Exception {
diff --git a/framework/src/onos/utils/netty/pom.xml b/framework/src/onos/utils/netty/pom.xml
index fa320d52..5ce4838b 100644
--- a/framework/src/onos/utils/netty/pom.xml
+++ b/framework/src/onos/utils/netty/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onlab-utils</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/utils/nio/pom.xml b/framework/src/onos/utils/nio/pom.xml
index b9e4d447..83957669 100644
--- a/framework/src/onos/utils/nio/pom.xml
+++ b/framework/src/onos/utils/nio/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onlab-utils</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/utils/osgi/pom.xml b/framework/src/onos/utils/osgi/pom.xml
index 7be6c69d..cf79312d 100644
--- a/framework/src/onos/utils/osgi/pom.xml
+++ b/framework/src/onos/utils/osgi/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onlab-utils</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/utils/pom.xml b/framework/src/onos/utils/pom.xml
index 2adbba70..c2fa5dc6 100644
--- a/framework/src/onos/utils/pom.xml
+++ b/framework/src/onos/utils/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/utils/rest/pom.xml b/framework/src/onos/utils/rest/pom.xml
index ce2bd845..c9a7df75 100644
--- a/framework/src/onos/utils/rest/pom.xml
+++ b/framework/src/onos/utils/rest/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onlab-utils</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/utils/stc/bin/stc b/framework/src/onos/utils/stc/bin/stc
index 23affc4a..241822c5 100755
--- a/framework/src/onos/utils/stc/bin/stc
+++ b/framework/src/onos/utils/stc/bin/stc
@@ -5,7 +5,7 @@
STC_ROOT=${STC_ROOT:-$(dirname $0)/..}
cd $STC_ROOT
-VER=1.3.0-SNAPSHOT
+VER=1.4.0-SNAPSHOT
PATH=$PWD/bin:$PATH
diff --git a/framework/src/onos/utils/stc/pom.xml b/framework/src/onos/utils/stc/pom.xml
index a3f96430..a71dcfe3 100644
--- a/framework/src/onos/utils/stc/pom.xml
+++ b/framework/src/onos/utils/stc/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onlab-utils</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/utils/stc/src/main/java/org/onlab/stc/Coordinator.java b/framework/src/onos/utils/stc/src/main/java/org/onlab/stc/Coordinator.java
index 8e3aad5b..ef1c31f3 100644
--- a/framework/src/onos/utils/stc/src/main/java/org/onlab/stc/Coordinator.java
+++ b/framework/src/onos/utils/stc/src/main/java/org/onlab/stc/Coordinator.java
@@ -109,6 +109,15 @@ public class Coordinator {
}
/**
+ * Returns number of milliseconds it took to execute.
+ *
+ * @return number of millis elapsed during the run
+ */
+ public long duration() {
+ return store.endTime() - store.startTime();
+ }
+
+ /**
* Returns a list of steps that match the specified list of patterns.
*
* @param runToPatterns list of patterns
diff --git a/framework/src/onos/utils/stc/src/main/java/org/onlab/stc/Main.java b/framework/src/onos/utils/stc/src/main/java/org/onlab/stc/Main.java
index 09b89456..bc10ec7a 100644
--- a/framework/src/onos/utils/stc/src/main/java/org/onlab/stc/Main.java
+++ b/framework/src/onos/utils/stc/src/main/java/org/onlab/stc/Main.java
@@ -44,11 +44,12 @@ public final class Main {
private static final String GREEN = "\u001B[32;1m";
private static final String BLUE = "\u001B[36m";
- private static final String SUCCESS_SUMMARY = "%sPassed! %d steps succeeded%s";
+ private static final String SUCCESS_SUMMARY =
+ "%s %sPassed! %d steps succeeded%s";
private static final String MIXED_SUMMARY =
"%s%d steps succeeded; %s%d steps failed; %s%d steps skipped%s";
- private static final String FAILURE_SUMMARY = "%sFailed! " + MIXED_SUMMARY;
- private static final String ABORTED_SUMMARY = "%sAborted! " + MIXED_SUMMARY;
+ private static final String FAILURE_SUMMARY = "%s %sFailed! " + MIXED_SUMMARY;
+ private static final String ABORTED_SUMMARY = "%s %sAborted! " + MIXED_SUMMARY;
private boolean isReported = false;
@@ -180,6 +181,7 @@ public final class Main {
private void processList() {
coordinator.getRecords()
.forEach(event -> logStatus(event.time(), event.name(), event.status(), event.command()));
+ printSummary(0, false);
System.exit(0);
}
@@ -201,14 +203,15 @@ public final class Main {
if (!isReported) {
isReported = true;
Set<Step> steps = coordinator.getSteps();
+ String duration = formatDuration((int) (coordinator.duration() / 1_000));
int count = steps.size();
if (exitCode == 0) {
- print(SUCCESS_SUMMARY, color(SUCCEEDED), count, color(null));
+ print(SUCCESS_SUMMARY, duration, color(SUCCEEDED), count, color(null));
} else {
long success = steps.stream().filter(s -> coordinator.getStatus(s) == SUCCEEDED).count();
long failed = steps.stream().filter(s -> coordinator.getStatus(s) == FAILED).count();
long skipped = steps.stream().filter(s -> coordinator.getStatus(s) == SKIPPED).count();
- print(isAborted ? ABORTED_SUMMARY : FAILURE_SUMMARY,
+ print(isAborted ? ABORTED_SUMMARY : FAILURE_SUMMARY, duration,
color(FAILED), color(SUCCEEDED), success,
color(FAILED), failed, color(SKIPPED), skipped, color(null));
}
@@ -281,6 +284,17 @@ public final class Main {
}
}
+ // Formats time duration
+ private static String formatDuration(int totalSeconds) {
+ int seconds = totalSeconds % 60;
+ int totalMinutes = totalSeconds / 60;
+ int minutes = totalMinutes % 60;
+ int hours = totalMinutes / 60;
+ return hours > 0 ?
+ String.format("%d:%02d:%02d", hours, minutes, seconds) :
+ String.format("%d:%02d", minutes, seconds);
+ }
+
// Shutdown hook to report status even when aborted.
private class ShutdownHook extends Thread {
@Override
diff --git a/framework/src/onos/utils/stc/src/main/java/org/onlab/stc/ScenarioStore.java b/framework/src/onos/utils/stc/src/main/java/org/onlab/stc/ScenarioStore.java
index d37222b1..7313462e 100644
--- a/framework/src/onos/utils/stc/src/main/java/org/onlab/stc/ScenarioStore.java
+++ b/framework/src/onos/utils/stc/src/main/java/org/onlab/stc/ScenarioStore.java
@@ -43,6 +43,9 @@ class ScenarioStore {
private final List<StepEvent> events = Lists.newArrayList();
private final Map<String, Status> statusMap = Maps.newConcurrentMap();
+ private long startTime = Long.MAX_VALUE;
+ private long endTime = Long.MIN_VALUE;
+
/**
* Creates a new scenario store for the specified process flow.
*
@@ -69,6 +72,8 @@ class ScenarioStore {
PropertiesConfiguration cfg = new PropertiesConfiguration(storeFile);
cfg.clear();
cfg.save();
+ startTime = Long.MAX_VALUE;
+ endTime = Long.MIN_VALUE;
} catch (ConfigurationException e) {
print("Unable to store file %s", storeFile);
}
@@ -156,6 +161,8 @@ class ScenarioStore {
private synchronized void add(StepEvent event) {
events.add(event);
statusMap.put(event.name(), event.status());
+ startTime = Math.min(startTime, event.time());
+ endTime = Math.max(endTime, event.time());
}
/**
@@ -198,4 +205,22 @@ class ScenarioStore {
}
}
+ /**
+ * Returns the scenario run start time.
+ *
+ * @return start time in mills since start of epoch
+ */
+ public long startTime() {
+ return startTime;
+ }
+
+ /**
+ * Returns the scenario run end time or current time if the scenario
+ * is still running.
+ *
+ * @return end time (or current time) in mills since start of epoch
+ */
+ public long endTime() {
+ return endTime > 0 ? endTime : System.currentTimeMillis();
+ }
}
diff --git a/framework/src/onos/utils/thirdparty/pom.xml b/framework/src/onos/utils/thirdparty/pom.xml
index f5c81677..bb5e3e06 100644
--- a/framework/src/onos/utils/thirdparty/pom.xml
+++ b/framework/src/onos/utils/thirdparty/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onlab-utils</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/web/api/pom.xml b/framework/src/onos/web/api/pom.xml
index b4201865..99aeab22 100644
--- a/framework/src/onos/web/api/pom.xml
+++ b/framework/src/onos/web/api/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-web</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/web/gui/pom.xml b/framework/src/onos/web/gui/pom.xml
index 4ce7e93f..6b8480ad 100644
--- a/framework/src/onos/web/gui/pom.xml
+++ b/framework/src/onos/web/gui/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos-web</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TunnelViewMessageHandler.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TunnelViewMessageHandler.java
index 13ce9398..16848188 100644
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TunnelViewMessageHandler.java
+++ b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TunnelViewMessageHandler.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.onosproject.ui.impl;
import com.fasterxml.jackson.databind.node.ObjectNode;
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/package-info.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/package-info.java
new file mode 100644
index 00000000..07f4802a
--- /dev/null
+++ b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Topology resources for the ONOS GUI.
+ */
+package org.onosproject.ui.impl.topo;
diff --git a/framework/src/onos/web/pom.xml b/framework/src/onos/web/pom.xml
index 46f42322..d7b6fe05 100644
--- a/framework/src/onos/web/pom.xml
+++ b/framework/src/onos/web/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.onosproject</groupId>
<artifactId>onos</artifactId>
- <version>1.3.0-SNAPSHOT</version>
+ <version>1.4.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>