blob: bf49bd934c9fac6dd9756896e27d9b1d1c4b79d2 [file] [log] [blame]
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2014-present Open Networking Foundation
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
Brian O'Connorabafb502014-12-02 22:26:20 -080016package org.onosproject.net;
tome33cc1a2014-08-25 21:59:41 -070017
Jonghwan Hyun2c95acf2018-03-14 16:47:34 -070018import org.onlab.packet.EthType;
Pavlin Radoslavov33f228a2014-10-27 19:33:16 -070019import org.onlab.packet.IpAddress;
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070020import org.onlab.packet.MacAddress;
21import org.onlab.packet.VlanId;
tom7869ad92014-09-09 14:32:08 -070022
23import java.util.Set;
24
tome33cc1a2014-08-25 21:59:41 -070025/**
26 * Abstraction of an end-station host on the network, essentially a NIC.
27 */
tomb36046e2014-08-27 00:22:24 -070028public interface Host extends Element {
tome33cc1a2014-08-25 21:59:41 -070029
tom7869ad92014-09-09 14:32:08 -070030 /**
31 * Host identification.
32 *
33 * @return host id
34 */
Ayaka Koshibe1c7b38e2014-09-11 13:09:51 -070035 @Override
tom7869ad92014-09-09 14:32:08 -070036 HostId id();
tome33cc1a2014-08-25 21:59:41 -070037
tom7869ad92014-09-09 14:32:08 -070038 /**
39 * Returns the host MAC address.
40 *
41 * @return mac address
42 */
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070043 MacAddress mac();
tom7869ad92014-09-09 14:32:08 -070044
45 /**
Ayaka Koshibe74a23922014-09-09 16:45:39 -070046 * Returns the VLAN ID tied to this host.
47 *
48 * @return VLAN ID value
49 */
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070050 VlanId vlan();
Ayaka Koshibe74a23922014-09-09 16:45:39 -070051
52 /**
tom7869ad92014-09-09 14:32:08 -070053 * Returns set of IP addresses currently bound to the host MAC address.
54 *
55 * @return set of IP addresses; empty if no IP address is bound
56 */
Pavlin Radoslavov33f228a2014-10-27 19:33:16 -070057 Set<IpAddress> ipAddresses();
tomb36046e2014-08-27 00:22:24 -070058
59 /**
60 * Returns the most recent host location where the host attaches to the
61 * network edge.
62 *
Charles Chancd06c692017-04-27 20:46:06 -070063 * @return the most recent host location
tomb36046e2014-08-27 00:22:24 -070064 */
65 HostLocation location();
66
sdn5e935452016-08-30 04:12:54 -070067 /**
Charles Chan67a38552019-11-19 14:30:43 -080068 * Returns host locations where the host attaches to the network edge.
Charles Chancd06c692017-04-27 20:46:06 -070069 *
Charles Chan67a38552019-11-19 14:30:43 -080070 * @return host locations
Charles Chancd06c692017-04-27 20:46:06 -070071 */
72 Set<HostLocation> locations();
73
74 /**
Charles Chan67a38552019-11-19 14:30:43 -080075 * Returns host auxiliary locations, which could be useful for app operations in addition to the attach points.
76 *
77 * @return auxiliary locations, or null if unspecified
78 */
79 Set<HostLocation> auxLocations();
80
81 /**
sdn5e935452016-08-30 04:12:54 -070082 * Returns true if configured by NetworkConfiguration.
jobind19b7142019-05-17 09:46:52 -040083 *
sdn5e935452016-08-30 04:12:54 -070084 * @return configured/learnt dynamically
85 */
86 default boolean configured() {
87 return false;
88 }
Jonghwan Hyun2c95acf2018-03-14 16:47:34 -070089
90 /**
91 * Returns the inner VLAN ID tied to this host.
92 *
93 * @return VLAN ID value; VlanId.NONE if only one VLAN ID is tied to this host
94 */
95 default VlanId innerVlan() {
96 return VlanId.NONE;
97 }
98
99 /**
100 * Returns the TPID of the outermost VLAN associated with this host.
101 *
102 * @return TPID of the outermost VLAN header
103 */
104 default EthType tpid() {
105 return EthType.EtherType.UNKNOWN.ethType();
106 }
tom7869ad92014-09-09 14:32:08 -0700107 // TODO: explore capturing list of recent locations to aid in mobility
tome33cc1a2014-08-25 21:59:41 -0700108
jobind19b7142019-05-17 09:46:52 -0400109 /**
110 * Returns the state of host whether it is in suspended state(offending host due to frequent movement.).
111 *
112 * @return state true if suspended else false.
113 */
114 boolean suspended();
115
tome33cc1a2014-08-25 21:59:41 -0700116}