blob: c609b956801af369a9e01f7aa56e849b6f4e0682 [file] [log] [blame]
Jonathan Hartdc711bd2014-10-15 11:24:23 -07001package org.onlab.onos.sdnip;
2
3import static com.google.common.base.Preconditions.checkNotNull;
4
5import java.util.Set;
6
Jonathan Hartdc711bd2014-10-15 11:24:23 -07007import org.onlab.onos.net.ConnectPoint;
8import org.onlab.onos.net.host.HostService;
9import org.onlab.onos.net.host.PortAddresses;
10import org.onlab.onos.sdnip.config.Interface;
11import org.onlab.packet.IpAddress;
Jonathan Hart4c2b15e2014-10-20 13:10:56 -070012import org.onlab.packet.IpPrefix;
Jonathan Hartdc711bd2014-10-15 11:24:23 -070013
14import com.google.common.collect.Sets;
15
Jonathan Hartdc711bd2014-10-15 11:24:23 -070016/**
Jonathan Hart4c2b15e2014-10-20 13:10:56 -070017 * Provides InterfaceService using PortAddresses data from the HostService.
Jonathan Hartdc711bd2014-10-15 11:24:23 -070018 */
Jonathan Hartce37f6d2014-10-20 10:25:03 -070019public class HostToInterfaceAdaptor implements InterfaceService {
Jonathan Hartdc711bd2014-10-15 11:24:23 -070020
21 private final HostService hostService;
22
Jonathan Hartce37f6d2014-10-20 10:25:03 -070023 public HostToInterfaceAdaptor(HostService hostService) {
Jonathan Hartdc711bd2014-10-15 11:24:23 -070024 this.hostService = checkNotNull(hostService);
25 }
26
27 @Override
28 public Set<Interface> getInterfaces() {
29 Set<PortAddresses> addresses = hostService.getAddressBindings();
30 Set<Interface> interfaces = Sets.newHashSetWithExpectedSize(addresses.size());
31 for (PortAddresses a : addresses) {
32 interfaces.add(new Interface(a));
33 }
34 return interfaces;
35 }
36
37 @Override
38 public Interface getInterface(ConnectPoint connectPoint) {
39 checkNotNull(connectPoint);
40
41 PortAddresses portAddresses =
42 hostService.getAddressBindingsForPort(connectPoint);
43
44 if (!portAddresses.ips().isEmpty()) {
45 return new Interface(portAddresses);
46 }
47
48 return null;
49 }
50
51 @Override
52 public Interface getMatchingInterface(IpAddress ipAddress) {
Jonathan Hart4c2b15e2014-10-20 13:10:56 -070053 checkNotNull(ipAddress);
54
55 for (PortAddresses portAddresses : hostService.getAddressBindings()) {
56 for (IpPrefix p : portAddresses.ips()) {
57 if (p.contains(ipAddress)) {
58 return new Interface(portAddresses);
59 }
60 }
61 }
62
63 return null;
Jonathan Hartdc711bd2014-10-15 11:24:23 -070064 }
65
66}