blob: a84e72f4072769277fb183c88cc3e16481180d30 [file] [log] [blame]
Ray Milkeyfcb623d2015-10-01 16:48:18 -07001/*
Shubham Sharma1e43c562019-06-19 14:18:12 +00002 Copyright 2015-present Open Networking Foundation
Ray Milkeyfcb623d2015-10-01 16:48:18 -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 */
alshabib6d527452016-06-01 18:00:47 -070016package org.opencord.aaa;
Ray Milkeyfcb623d2015-10-01 16:48:18 -070017
Shubham Sharma1e43c562019-06-19 14:18:12 +000018import java.net.InetAddress;
19import java.net.UnknownHostException;
20import java.util.HashSet;
21import java.util.Set;
22
Matt Jeanneret2ff1a782018-06-13 15:24:25 -040023import org.apache.commons.lang3.builder.ToStringBuilder;
Ray Milkeyfcb623d2015-10-01 16:48:18 -070024import org.onosproject.core.ApplicationId;
Amit Ghoshc9ac1e52017-07-28 12:31:18 +010025import org.onosproject.net.ConnectPoint;
Ray Milkeyfcb623d2015-10-01 16:48:18 -070026import org.onosproject.net.config.Config;
27import org.onosproject.net.config.basics.BasicElementConfig;
28
Shubham Sharma1e43c562019-06-19 14:18:12 +000029import com.fasterxml.jackson.databind.JsonNode;
30import com.fasterxml.jackson.databind.node.ArrayNode;
31import com.google.common.collect.ImmutableSet;
Amit Ghoshc9ac1e52017-07-28 12:31:18 +010032
Ray Milkeyfcb623d2015-10-01 16:48:18 -070033/**
34 * Network config for the AAA app.
35 */
Jonathan Hart092dfb22015-11-16 23:05:21 -080036public class AaaConfig extends Config<ApplicationId> {
Ray Milkeyfcb623d2015-10-01 16:48:18 -070037
Jonathan Hartf935b122018-07-11 16:16:02 -070038 private static final String RADIUS_HOST = "radiusHost";
Ray Milkeyfcb623d2015-10-01 16:48:18 -070039 private static final String RADIUS_IP = "radiusIp";
ke han1fe3b0e2017-02-28 09:50:20 +080040 private static final String RADIUS_SERVER_PORT = "radiusServerPort";
Shubham Sharma1e43c562019-06-19 14:18:12 +000041 private static final String SESSION_CLEANUP_TIMER = "sessionCleanupTimer";
Ray Milkeyfcb623d2015-10-01 16:48:18 -070042 private static final String RADIUS_MAC = "radiusMac";
43 private static final String NAS_IP = "nasIp";
44 private static final String NAS_MAC = "nasMac";
45 private static final String RADIUS_SECRET = "radiusSecret";
Amit Ghoshc9ac1e52017-07-28 12:31:18 +010046 private static final String RADIUS_VLAN_ID = "vlanId";
47 private static final String RADIUS_VLAN_PRIORITY_BIT = "radiusPBit";
Shubham Sharma1e43c562019-06-19 14:18:12 +000048 private static final String RADIUS_CONNECTION_TYPE = "radiusConnectionType";
Amit Ghoshc9ac1e52017-07-28 12:31:18 +010049 private static final String RADIUS_SERVER_CONNECTPOINTS = "radiusServerConnectPoints";
50 // Which packet customizer to use
51 // "packetCustomizer" : "sample" -- Means use SamplePAcketCustomizer
52 // "packetCustomizer" : "default" -- No customization of packets
53 // if param is missing it is treated as default
54 // This class should be a subclass of PacketCustomizer
55 private static final String PACKET_CUSTOMIZER = "packetCustomizer";
Ray Milkeyfcb623d2015-10-01 16:48:18 -070056
57 // RADIUS server IP address
Ray Milkey967776a2015-10-07 14:37:17 -070058 protected static final String DEFAULT_RADIUS_IP = "10.128.10.4";
Ray Milkeyfcb623d2015-10-01 16:48:18 -070059
60 // RADIUS MAC address
Matteo Scandolocf847b82019-04-26 15:00:00 -070061 public static final String DEFAULT_RADIUS_MAC = "00:00:00:00:01:10";
Ray Milkeyfcb623d2015-10-01 16:48:18 -070062
63 // NAS IP address
Matteo Scandolocf847b82019-04-26 15:00:00 -070064 public static final String DEFAULT_NAS_IP = "10.128.9.244";
Ray Milkeyfcb623d2015-10-01 16:48:18 -070065
66 // NAS MAC address
Matteo Scandolocf847b82019-04-26 15:00:00 -070067 public static final String DEFAULT_NAS_MAC = "00:00:00:00:10:01";
Ray Milkeyfcb623d2015-10-01 16:48:18 -070068
Ray Milkeyfcb623d2015-10-01 16:48:18 -070069 // RADIUS server shared secret
70 protected static final String DEFAULT_RADIUS_SECRET = "ONOSecret";
71
Ray Milkey5d99bd12015-10-06 15:41:30 -070072 // Radius Server UDP Port Number
73 protected static final String DEFAULT_RADIUS_SERVER_PORT = "1812";
74
Shubham Sharma1e43c562019-06-19 14:18:12 +000075 // Time configured for triggering timeouts in AAA app
76 protected static final String DEFAULT_SESSION_CLEANUP_TIMER = "10";
77
Amit Ghoshc9ac1e52017-07-28 12:31:18 +010078 // Radius Server Vlan ID
79 protected static final String DEFAULT_RADIUS_VLAN_ID = "4093";
80
81 // Radius Sever P-Bit
82 protected static final String DEFAULT_RADIUS_VLAN_PRIORITY_BIT = "3";
83
84 // Whether to use socket or not to communicate with RADIUS Server
85 protected static final String DEFAULT_RADIUS_CONNECTION_TYPE = "socket";
86
87 // Packet Customizer Default value
88 protected static final String DEFAULT_PACKET_CUSTOMIZER = "default";
89
Ray Milkey5d99bd12015-10-06 15:41:30 -070090 /**
Shubham Sharma1e43c562019-06-19 14:18:12 +000091 * Gets the value of a string property, protecting for an empty JSON object.
Ray Milkey5d99bd12015-10-06 15:41:30 -070092 *
Shubham Sharma1e43c562019-06-19 14:18:12 +000093 * @param name name of the property
Ray Milkey5d99bd12015-10-06 15:41:30 -070094 * @param defaultValue default value if none has been specified
95 * @return String value if one os found, default value otherwise
96 */
97 private String getStringProperty(String name, String defaultValue) {
98 if (object == null) {
99 return defaultValue;
100 }
101 return get(name, defaultValue);
102 }
103
Ray Milkeyfcb623d2015-10-01 16:48:18 -0700104 /**
105 * Returns the NAS ip.
106 *
107 * @return ip address or null if not set
108 */
109 public InetAddress nasIp() {
110 try {
Ray Milkey5d99bd12015-10-06 15:41:30 -0700111 return InetAddress.getByName(getStringProperty(NAS_IP, DEFAULT_NAS_IP));
Ray Milkeyfcb623d2015-10-01 16:48:18 -0700112 } catch (UnknownHostException e) {
113 return null;
114 }
115 }
116
117 /**
118 * Sets the NAS ip.
119 *
120 * @param ip new ip address; null to clear
121 * @return self
122 */
123 public BasicElementConfig nasIp(String ip) {
124 return (BasicElementConfig) setOrClear(NAS_IP, ip);
125 }
126
Jonathan Hartf935b122018-07-11 16:16:02 -0700127 public String radiusHostName() {
128 return getStringProperty(RADIUS_HOST, null);
129 }
130
Ray Milkeyfcb623d2015-10-01 16:48:18 -0700131 /**
132 * Returns the RADIUS server ip.
133 *
134 * @return ip address or null if not set
135 */
136 public InetAddress radiusIp() {
137 try {
Ray Milkey5d99bd12015-10-06 15:41:30 -0700138 return InetAddress.getByName(getStringProperty(RADIUS_IP, DEFAULT_RADIUS_IP));
Ray Milkeyfcb623d2015-10-01 16:48:18 -0700139 } catch (UnknownHostException e) {
140 return null;
141 }
142 }
143
144 /**
145 * Sets the RADIUS server ip.
146 *
147 * @param ip new ip address; null to clear
148 * @return self
149 */
150 public BasicElementConfig radiusIp(String ip) {
151 return (BasicElementConfig) setOrClear(RADIUS_IP, ip);
152 }
153
154 /**
155 * Returns the RADIUS MAC address.
156 *
157 * @return mac address or null if not set
158 */
159 public String radiusMac() {
Ray Milkey5d99bd12015-10-06 15:41:30 -0700160 return getStringProperty(RADIUS_MAC, DEFAULT_RADIUS_MAC);
Ray Milkeyfcb623d2015-10-01 16:48:18 -0700161 }
162
163 /**
164 * Sets the RADIUS MAC address.
165 *
166 * @param mac new MAC address; null to clear
167 * @return self
168 */
169 public BasicElementConfig radiusMac(String mac) {
170 return (BasicElementConfig) setOrClear(RADIUS_MAC, mac);
171 }
172
173 /**
174 * Returns the RADIUS MAC address.
175 *
176 * @return mac address or null if not set
177 */
178 public String nasMac() {
Ray Milkey5d99bd12015-10-06 15:41:30 -0700179 return getStringProperty(NAS_MAC, DEFAULT_NAS_MAC);
Ray Milkeyfcb623d2015-10-01 16:48:18 -0700180 }
181
182 /**
183 * Sets the RADIUS MAC address.
184 *
185 * @param mac new MAC address; null to clear
186 * @return self
187 */
188 public BasicElementConfig nasMac(String mac) {
189 return (BasicElementConfig) setOrClear(NAS_MAC, mac);
190 }
191
192 /**
193 * Returns the RADIUS secret.
194 *
195 * @return radius secret or null if not set
196 */
197 public String radiusSecret() {
Ray Milkey5d99bd12015-10-06 15:41:30 -0700198 return getStringProperty(RADIUS_SECRET, DEFAULT_RADIUS_SECRET);
Ray Milkeyfcb623d2015-10-01 16:48:18 -0700199 }
200
201 /**
202 * Sets the RADIUS secret.
203 *
204 * @param secret new MAC address; null to clear
205 * @return self
206 */
207 public BasicElementConfig radiusSecret(String secret) {
208 return (BasicElementConfig) setOrClear(RADIUS_SECRET, secret);
209 }
210
211 /**
Ray Milkey5d99bd12015-10-06 15:41:30 -0700212 * Returns the RADIUS server UDP port.
213 *
214 * @return radius server UDP port.
215 */
Jonathan Hart092dfb22015-11-16 23:05:21 -0800216 public short radiusServerUdpPort() {
Shubham Sharma1e43c562019-06-19 14:18:12 +0000217 return Short.parseShort(getStringProperty(RADIUS_SERVER_PORT, DEFAULT_RADIUS_SERVER_PORT));
Ray Milkey5d99bd12015-10-06 15:41:30 -0700218 }
219
220 /**
221 * Sets the RADIUS port.
222 *
223 * @param port new RADIUS UDP port; -1 to clear
224 * @return self
225 */
Jonathan Hart092dfb22015-11-16 23:05:21 -0800226 public BasicElementConfig radiusServerUdpPort(short port) {
Ray Milkey5d99bd12015-10-06 15:41:30 -0700227 return (BasicElementConfig) setOrClear(RADIUS_SERVER_PORT, (long) port);
228 }
229
Amit Ghoshc9ac1e52017-07-28 12:31:18 +0100230 /**
231 * Returns the RADIUS server vlan ID.
232 *
233 * @return Radius Server VLan id or default if not set
234 */
235 public short radiusServerVlanId() {
236 return Short.parseShort(getStringProperty(RADIUS_VLAN_ID, DEFAULT_RADIUS_VLAN_ID));
237 }
238
239 /**
240 * Returns the type of connection to use to communicate with the RADIUS Server.
241 *
242 * @return "socket" or "packet_out"
243 */
244 public String radiusConnectionType() {
245 return getStringProperty(RADIUS_CONNECTION_TYPE, DEFAULT_RADIUS_CONNECTION_TYPE);
246 }
247
248 /**
249 * Returns the RADIUS server p-bit.
250 *
251 * @return Radius Server P-bit to use, default if not set
252 */
253 public byte radiusServerPBit() {
254 return Byte.parseByte(getStringProperty(RADIUS_VLAN_PRIORITY_BIT, DEFAULT_RADIUS_VLAN_PRIORITY_BIT));
255 }
256
257 /**
258 * Returns the PACKET CUSTOMIZER CLASS NAME.
259 *
260 * @return PACKET CUSTOMIZER, default if not set
261 */
262 public String radiusPktCustomizer() {
263 return getStringProperty(PACKET_CUSTOMIZER, DEFAULT_PACKET_CUSTOMIZER);
264 }
265
266 /**
Shubham Sharma1e43c562019-06-19 14:18:12 +0000267 * Returns the time configured for checking timeout .
268 *
269 * @return timerTimeout
270 */
271 public int sessionCleanupTimer() {
272 return Integer
273 .parseInt(getStringProperty(SESSION_CLEANUP_TIMER, DEFAULT_SESSION_CLEANUP_TIMER));
274 }
275
276 /**
Amit Ghoshc9ac1e52017-07-28 12:31:18 +0100277 * Returns the List of ConnectPoints to reach the Radius Server.
278 *
279 * @return List of ConnectPoints
280 */
281 public Set<ConnectPoint> radiusServerConnectPoints() {
282 if (object == null) {
283 return new HashSet<ConnectPoint>();
284 }
285
286 if (!object.has(RADIUS_SERVER_CONNECTPOINTS)) {
287 return ImmutableSet.of();
288 }
289
290 ImmutableSet.Builder<ConnectPoint> builder = ImmutableSet.builder();
291 ArrayNode arrayNode = (ArrayNode) object.path(RADIUS_SERVER_CONNECTPOINTS);
292 for (JsonNode jsonNode : arrayNode) {
293 String portName = jsonNode.asText(null);
294 if (portName == null) {
295 return null;
296 }
297 try {
298 builder.add(ConnectPoint.deviceConnectPoint(portName));
299 } catch (IllegalArgumentException e) {
300 return null;
301 }
302 }
303 return builder.build();
304 }
Matt Jeanneret2ff1a782018-06-13 15:24:25 -0400305
306 @Override
307 public String toString() {
308 return ToStringBuilder.reflectionToString(this);
309 }
Ray Milkeyfcb623d2015-10-01 16:48:18 -0700310}