blob: 3cf0c0c61fb4cfe575cb1bb44253e1ea95ba9902 [file] [log] [blame]
Thomas Vachuska96d55b12015-05-11 08:52:03 -07001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2015-present Open Networking Foundation
Thomas Vachuska96d55b12015-05-11 08:52:03 -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 */
Thomas Vachuska4998caa2015-08-26 13:28:38 -070016package org.onosproject.net.config.impl;
Thomas Vachuska96d55b12015-05-11 08:52:03 -070017
18import com.google.common.collect.ImmutableSet;
Thomas Vachuska9fadbfc2015-07-23 10:56:02 -070019import org.onosproject.core.CoreService;
Jonathan Hart111b42b2015-07-14 13:28:05 -070020import org.onosproject.net.ConnectPoint;
Thomas Vachuska96d55b12015-05-11 08:52:03 -070021import org.onosproject.net.DeviceId;
22import org.onosproject.net.HostId;
23import org.onosproject.net.LinkKey;
Jonathan Hartc43fd1c2016-01-18 20:02:20 -080024import org.onosproject.net.config.BasicNetworkConfigService;
Thomas Vachuska4998caa2015-08-26 13:28:38 -070025import org.onosproject.net.config.ConfigFactory;
26import org.onosproject.net.config.NetworkConfigRegistry;
27import org.onosproject.net.config.basics.BasicDeviceConfig;
28import org.onosproject.net.config.basics.BasicHostConfig;
29import org.onosproject.net.config.basics.BasicLinkConfig;
Simon Huntf59d36b2016-10-04 19:05:53 -070030import org.onosproject.net.config.basics.BasicRegionConfig;
Simon Huntd7395c82016-10-20 17:54:01 -070031import org.onosproject.net.config.basics.BasicUiTopoLayoutConfig;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070032import org.onosproject.net.config.basics.DeviceAnnotationConfig;
Rafał Szaleckide5cf842018-11-17 13:30:01 +010033import org.onosproject.net.config.basics.HostAnnotationConfig;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070034import org.onosproject.net.config.basics.InterfaceConfig;
Yuta HIGUCHI7438f5a2017-02-15 22:09:46 -080035import org.onosproject.net.config.basics.PortAnnotationConfig;
Rafał Szaleckide5cf842018-11-17 13:30:01 +010036import org.onosproject.net.config.basics.PortDescriptionsConfig;
Thomas Vachuska4998caa2015-08-26 13:28:38 -070037import org.onosproject.net.config.basics.SubjectFactories;
Simon Huntf59d36b2016-10-04 19:05:53 -070038import org.onosproject.net.region.RegionId;
Simon Huntd7395c82016-10-20 17:54:01 -070039import org.onosproject.ui.model.topo.UiTopoLayoutId;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070040import org.osgi.service.component.annotations.Activate;
41import org.osgi.service.component.annotations.Component;
42import org.osgi.service.component.annotations.Deactivate;
43import org.osgi.service.component.annotations.Reference;
44import org.osgi.service.component.annotations.ReferenceCardinality;
Thomas Vachuska96d55b12015-05-11 08:52:03 -070045import org.slf4j.Logger;
46import org.slf4j.LoggerFactory;
47
48import java.util.Set;
49
Simon Huntf59d36b2016-10-04 19:05:53 -070050import static org.onosproject.net.config.basics.SubjectFactories.CONNECT_POINT_SUBJECT_FACTORY;
51import static org.onosproject.net.config.basics.SubjectFactories.DEVICE_SUBJECT_FACTORY;
52import static org.onosproject.net.config.basics.SubjectFactories.HOST_SUBJECT_FACTORY;
Simon Huntd7395c82016-10-20 17:54:01 -070053import static org.onosproject.net.config.basics.SubjectFactories.LAYOUT_SUBJECT_FACTORY;
Simon Huntf59d36b2016-10-04 19:05:53 -070054import static org.onosproject.net.config.basics.SubjectFactories.LINK_SUBJECT_FACTORY;
55import static org.onosproject.net.config.basics.SubjectFactories.REGION_SUBJECT_FACTORY;
Thomas Vachuska96d55b12015-05-11 08:52:03 -070056
57/**
58 * Component for registration of builtin basic network configurations.
59 */
Ray Milkeyd84f89b2018-08-17 14:54:17 -070060@Component(immediate = true, service = BasicNetworkConfigService.class)
Jonathan Hartc43fd1c2016-01-18 20:02:20 -080061public class BasicNetworkConfigs implements BasicNetworkConfigService {
Thomas Vachuska96d55b12015-05-11 08:52:03 -070062
Simon Huntf59d36b2016-10-04 19:05:53 -070063 private static final String BASIC = "basic";
64 private static final String INTERFACES = "interfaces";
Andrea Campanella75ef9f52017-07-27 20:14:32 +020065 private static final String PORTS = "ports";
Simon Huntf59d36b2016-10-04 19:05:53 -070066
Thomas Vachuska96d55b12015-05-11 08:52:03 -070067 private final Logger log = LoggerFactory.getLogger(getClass());
68
69 private final Set<ConfigFactory> factories = ImmutableSet.of(
70 new ConfigFactory<DeviceId, BasicDeviceConfig>(DEVICE_SUBJECT_FACTORY,
Palash Kalaa06a6162017-11-15 20:42:40 +090071 BasicDeviceConfig.class,
72 BASIC) {
Thomas Vachuska96d55b12015-05-11 08:52:03 -070073 @Override
74 public BasicDeviceConfig createConfig() {
75 return new BasicDeviceConfig();
76 }
77 },
Jonathan Harteb8c9472015-08-05 07:43:13 -070078 new ConfigFactory<ConnectPoint, InterfaceConfig>(CONNECT_POINT_SUBJECT_FACTORY,
Palash Kalaa06a6162017-11-15 20:42:40 +090079 InterfaceConfig.class,
80 INTERFACES,
81 true) {
Jonathan Hart111b42b2015-07-14 13:28:05 -070082 @Override
Jonathan Harteb8c9472015-08-05 07:43:13 -070083 public InterfaceConfig createConfig() {
84 return new InterfaceConfig();
Jonathan Hart111b42b2015-07-14 13:28:05 -070085 }
86 },
Thomas Vachuska96d55b12015-05-11 08:52:03 -070087 new ConfigFactory<HostId, BasicHostConfig>(HOST_SUBJECT_FACTORY,
Palash Kalaa06a6162017-11-15 20:42:40 +090088 BasicHostConfig.class,
89 BASIC) {
Thomas Vachuska96d55b12015-05-11 08:52:03 -070090 @Override
91 public BasicHostConfig createConfig() {
92 return new BasicHostConfig();
93 }
94 },
95 new ConfigFactory<LinkKey, BasicLinkConfig>(LINK_SUBJECT_FACTORY,
Palash Kalaa06a6162017-11-15 20:42:40 +090096 BasicLinkConfig.class,
97 BasicLinkConfig.CONFIG_KEY) {
Thomas Vachuska96d55b12015-05-11 08:52:03 -070098 @Override
99 public BasicLinkConfig createConfig() {
100 return new BasicLinkConfig();
101 }
Simon Huntf59d36b2016-10-04 19:05:53 -0700102 },
103 new ConfigFactory<RegionId, BasicRegionConfig>(REGION_SUBJECT_FACTORY,
Palash Kalaa06a6162017-11-15 20:42:40 +0900104 BasicRegionConfig.class,
105 BASIC) {
Simon Huntf59d36b2016-10-04 19:05:53 -0700106 @Override
107 public BasicRegionConfig createConfig() {
108 return new BasicRegionConfig();
109 }
Simon Huntd7395c82016-10-20 17:54:01 -0700110 },
111 new ConfigFactory<UiTopoLayoutId, BasicUiTopoLayoutConfig>(LAYOUT_SUBJECT_FACTORY,
Palash Kalaa06a6162017-11-15 20:42:40 +0900112 BasicUiTopoLayoutConfig.class,
113 BASIC) {
Simon Huntd7395c82016-10-20 17:54:01 -0700114 @Override
115 public BasicUiTopoLayoutConfig createConfig() {
116 return new BasicUiTopoLayoutConfig();
117 }
Yuta HIGUCHI7438f5a2017-02-15 22:09:46 -0800118 },
119 new ConfigFactory<ConnectPoint, PortAnnotationConfig>(CONNECT_POINT_SUBJECT_FACTORY,
Palash Kalaa06a6162017-11-15 20:42:40 +0900120 PortAnnotationConfig.class,
121 PortAnnotationConfig.CONFIG_KEY) {
Yuta HIGUCHI7438f5a2017-02-15 22:09:46 -0800122 @Override
123 public PortAnnotationConfig createConfig() {
124 return new PortAnnotationConfig();
125 }
Andrea Campanella75ef9f52017-07-27 20:14:32 +0200126 },
127 new ConfigFactory<DeviceId, PortDescriptionsConfig>(DEVICE_SUBJECT_FACTORY,
Palash Kalaa06a6162017-11-15 20:42:40 +0900128 PortDescriptionsConfig.class,
129 PORTS) {
Andrea Campanella75ef9f52017-07-27 20:14:32 +0200130 @Override
131 public PortDescriptionsConfig createConfig() {
132 return new PortDescriptionsConfig();
133 }
Palash Kalaa06a6162017-11-15 20:42:40 +0900134 },
135 new ConfigFactory<DeviceId, DeviceAnnotationConfig>(DEVICE_SUBJECT_FACTORY,
136 DeviceAnnotationConfig.class,
137 DeviceAnnotationConfig.CONFIG_KEY) {
138 @Override
139 public DeviceAnnotationConfig createConfig() {
140 return new DeviceAnnotationConfig();
141 }
Rafał Szaleckide5cf842018-11-17 13:30:01 +0100142 },
143 new ConfigFactory<HostId, HostAnnotationConfig>(HOST_SUBJECT_FACTORY,
144 HostAnnotationConfig.class,
145 HostAnnotationConfig.CONFIG_KEY) {
146 @Override
147 public HostAnnotationConfig createConfig() {
148 return new HostAnnotationConfig();
149 }
Thomas Vachuska96d55b12015-05-11 08:52:03 -0700150 }
Andrea Campanella75ef9f52017-07-27 20:14:32 +0200151
Thomas Vachuska96d55b12015-05-11 08:52:03 -0700152 );
153
Ray Milkeyd84f89b2018-08-17 14:54:17 -0700154 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Thomas Vachuska9fadbfc2015-07-23 10:56:02 -0700155 protected CoreService coreService;
156
Ray Milkeyd84f89b2018-08-17 14:54:17 -0700157 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Thomas Vachuska96d55b12015-05-11 08:52:03 -0700158 protected NetworkConfigRegistry registry;
159
160 @Activate
161 public void activate() {
Thomas Vachuska9fadbfc2015-07-23 10:56:02 -0700162 SubjectFactories.setCoreService(coreService);
Thomas Vachuska96d55b12015-05-11 08:52:03 -0700163 factories.forEach(registry::registerConfigFactory);
164 log.info("Started");
165 }
166
167 @Deactivate
168 public void deactivate() {
169 factories.forEach(registry::unregisterConfigFactory);
170 log.info("Stopped");
171 }
172
173}