mirror of
				https://github.com/opennetworkinglab/onos.git
				synced 2025-11-04 10:11:16 +01:00 
			
		
		
		
	IPv6RA : Global prefix listing command support
Change-Id: I3c2cd28feab202273b14532c6ed0403df4e36344
This commit is contained in:
		
							parent
							
								
									04f9d4bf93
								
							
						
					
					
						commit
						0b4057a57b
					
				@ -1,7 +1,9 @@
 | 
				
			|||||||
COMPILE_DEPS = [
 | 
					COMPILE_DEPS = [
 | 
				
			||||||
    '//lib:CORE_DEPS',
 | 
					    '//lib:CORE_DEPS',
 | 
				
			||||||
    '//lib:JACKSON',
 | 
					    '//lib:JACKSON',
 | 
				
			||||||
    '//incubator/api:onos-incubator-api'
 | 
					    '//incubator/api:onos-incubator-api',
 | 
				
			||||||
 | 
					    '//lib:org.apache.karaf.shell.console',
 | 
				
			||||||
 | 
					    '//cli:onos-cli'
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
osgi_jar (
 | 
					osgi_jar (
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
<!--
 | 
					<!--
 | 
				
			||||||
  ~ Copyright 2015-present Open Networking Foundation
 | 
					  ~ Copyright 2017-present Open Networking Foundation
 | 
				
			||||||
  ~ Originally created by Pengfei Lu, Network and Cloud Computing Laboratory, Dalian University of Technology, China
 | 
					  ~ Originally created by Pengfei Lu, Network and Cloud Computing Laboratory, Dalian University of Technology, China
 | 
				
			||||||
  ~ Advisers: Keqiu Li and Heng Qi
 | 
					  ~ Advisers: Keqiu Li and Heng Qi
 | 
				
			||||||
  ~ This work is supported by the State Key Program of National Natural Science of China(Grant No. 61432002)
 | 
					  ~ This work is supported by the State Key Program of National Natural Science of China(Grant No. 61432002)
 | 
				
			||||||
@ -66,6 +66,15 @@
 | 
				
			|||||||
            <artifactId>onlab-misc</artifactId>
 | 
					            <artifactId>onlab-misc</artifactId>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>org.apache.karaf.shell</groupId>
 | 
				
			||||||
 | 
					            <artifactId>org.apache.karaf.shell.console</artifactId>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>org.onosproject</groupId>
 | 
				
			||||||
 | 
					            <artifactId>onos-cli</artifactId>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
    </dependencies>
 | 
					    </dependencies>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</project>
 | 
					</project>
 | 
				
			||||||
 | 
				
			|||||||
@ -18,6 +18,7 @@ package org.onosproject.ra;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import org.apache.felix.scr.annotations.Activate;
 | 
					import org.apache.felix.scr.annotations.Activate;
 | 
				
			||||||
import org.apache.felix.scr.annotations.Component;
 | 
					import org.apache.felix.scr.annotations.Component;
 | 
				
			||||||
 | 
					import org.apache.felix.scr.annotations.Service;
 | 
				
			||||||
import org.apache.felix.scr.annotations.Deactivate;
 | 
					import org.apache.felix.scr.annotations.Deactivate;
 | 
				
			||||||
import org.apache.felix.scr.annotations.Modified;
 | 
					import org.apache.felix.scr.annotations.Modified;
 | 
				
			||||||
import org.apache.felix.scr.annotations.Property;
 | 
					import org.apache.felix.scr.annotations.Property;
 | 
				
			||||||
@ -87,12 +88,14 @@ import java.util.stream.IntStream;
 | 
				
			|||||||
import static com.google.common.base.Strings.isNullOrEmpty;
 | 
					import static com.google.common.base.Strings.isNullOrEmpty;
 | 
				
			||||||
import static org.onlab.util.Tools.get;
 | 
					import static org.onlab.util.Tools.get;
 | 
				
			||||||
import static org.onlab.util.Tools.groupedThreads;
 | 
					import static org.onlab.util.Tools.groupedThreads;
 | 
				
			||||||
 | 
					import com.google.common.collect.ImmutableMap;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Manages IPv6 Router Advertisements.
 | 
					 * Manages IPv6 Router Advertisements.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					@Service
 | 
				
			||||||
@Component(immediate = true)
 | 
					@Component(immediate = true)
 | 
				
			||||||
public class RouterAdvertisementManager {
 | 
					public class RouterAdvertisementManager implements RoutingAdvertisementService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final Logger log = LoggerFactory.getLogger(getClass());
 | 
					    private final Logger log = LoggerFactory.getLogger(getClass());
 | 
				
			||||||
    private static final String PROP_RA_THREADS_POOL = "raPoolSize";
 | 
					    private static final String PROP_RA_THREADS_POOL = "raPoolSize";
 | 
				
			||||||
@ -160,6 +163,11 @@ public class RouterAdvertisementManager {
 | 
				
			|||||||
    @GuardedBy(value = "this")
 | 
					    @GuardedBy(value = "this")
 | 
				
			||||||
    private final Map<DeviceId, List<InterfaceIpAddress>> globalPrefixes = new LinkedHashMap<>();
 | 
					    private final Map<DeviceId, List<InterfaceIpAddress>> globalPrefixes = new LinkedHashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public ImmutableMap<DeviceId, List<InterfaceIpAddress>> getGlobalPrefixes() {
 | 
				
			||||||
 | 
					        return ImmutableMap.copyOf(globalPrefixes);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private Function<Interface, Map.Entry<ConnectPoint, List<InterfaceIpAddress>>> prefixGenerator =
 | 
					    private Function<Interface, Map.Entry<ConnectPoint, List<InterfaceIpAddress>>> prefixGenerator =
 | 
				
			||||||
            i -> {
 | 
					            i -> {
 | 
				
			||||||
                Map.Entry<ConnectPoint, List<InterfaceIpAddress>> prefixEntry;
 | 
					                Map.Entry<ConnectPoint, List<InterfaceIpAddress>> prefixEntry;
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright 2017-present Open Networking Foundation
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR 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.ra;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.onosproject.net.DeviceId;
 | 
				
			||||||
 | 
					import org.onosproject.net.host.InterfaceIpAddress;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.google.common.collect.ImmutableMap;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public interface RoutingAdvertisementService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Returns global prefixes.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return global prefixes
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    ImmutableMap<DeviceId, List<InterfaceIpAddress>> getGlobalPrefixes();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -0,0 +1,51 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright 2017-present Open Networking Foundation
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR 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.ra.cli;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.onosproject.net.DeviceId;
 | 
				
			||||||
 | 
					import org.onosproject.net.host.InterfaceIpAddress;
 | 
				
			||||||
 | 
					import org.onosproject.ra.RoutingAdvertisementService;
 | 
				
			||||||
 | 
					import org.onosproject.cli.AbstractShellCommand;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.apache.karaf.shell.commands.Command;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.google.common.collect.ImmutableMap;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Command to list global-prefixes in Routing Advertisement.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@Command(scope = "onos", name = "ra-global-prefixes",
 | 
				
			||||||
 | 
					        description = "List Routing Advertisement global prefixes")
 | 
				
			||||||
 | 
					public class GlobalPrefixesListCommand extends AbstractShellCommand {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected void execute() {
 | 
				
			||||||
 | 
					        RoutingAdvertisementService raService =
 | 
				
			||||||
 | 
					                AbstractShellCommand.get(RoutingAdvertisementService.class);
 | 
				
			||||||
 | 
					        printGlobalPrefixes(raService.getGlobalPrefixes());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void printGlobalPrefixes(ImmutableMap<DeviceId, List<InterfaceIpAddress>> globalPrefixes) {
 | 
				
			||||||
 | 
					        globalPrefixes.forEach(((deviceId, interfaceIpAddresses) -> {
 | 
				
			||||||
 | 
					            print("%s", deviceId);
 | 
				
			||||||
 | 
					            interfaceIpAddresses.forEach(interfaceIpAddress -> print("    %s", interfaceIpAddress));
 | 
				
			||||||
 | 
					        }));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright 2017-present Open Networking Foundation
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Router Advertisement application CLI handlers.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					package org.onosproject.ra.cli;
 | 
				
			||||||
@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					<!--
 | 
				
			||||||
 | 
					  ~ Copyright 2017-present Open Networking Foundation
 | 
				
			||||||
 | 
					  ~
 | 
				
			||||||
 | 
					  ~ Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					  ~ you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					  ~ You may obtain a copy of the License at
 | 
				
			||||||
 | 
					  ~
 | 
				
			||||||
 | 
					  ~     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					  ~
 | 
				
			||||||
 | 
					  ~ Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					  ~ distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					  ~ See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					  ~ limitations under the License.
 | 
				
			||||||
 | 
					  -->
 | 
				
			||||||
 | 
					<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
 | 
				
			||||||
 | 
					        <command>
 | 
				
			||||||
 | 
					            <action class="org.onosproject.ra.cli.GlobalPrefixesListCommand"/>
 | 
				
			||||||
 | 
					        </command>
 | 
				
			||||||
 | 
					    </command-bundle>
 | 
				
			||||||
 | 
					</blueprint>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user