blob: a5d06a8aa5a89a521c98682a62bc6052c36fa818 [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;
Thomas Vachuska52f2cd12018-11-08 21:20:04 -080020import org.onosproject.net.config.basics.PortDescriptionsConfig;
Jonathan Hart111b42b2015-07-14 13:28:05 -070021import org.onosproject.net.ConnectPoint;
Thomas Vachuska96d55b12015-05-11 08:52:03 -070022import org.onosproject.net.DeviceId;
23import org.onosproject.net.HostId;
24import org.onosproject.net.LinkKey;
Jonathan Hartc43fd1c2016-01-18 20:02:20 -080025import org.onosproject.net.config.BasicNetworkConfigService;
Thomas Vachuska4998caa2015-08-26 13:28:38 -070026import org.onosproject.net.config.ConfigFactory;
27import org.onosproject.net.config.NetworkConfigRegistry;
28import org.onosproject.net.config.basics.BasicDeviceConfig;
29import org.onosproject.net.config.basics.BasicHostConfig;
30import org.onosproject.net.config.basics.BasicLinkConfig;
Simon Huntf59d36b2016-10-04 19:05:53 -070031import org.onosproject.net.config.basics.BasicRegionConfig;
Simon Huntd7395c82016-10-20 17:54:01 -070032import org.onosproject.net.config.basics.BasicUiTopoLayoutConfig;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070033import org.onosproject.net.config.basics.DeviceAnnotationConfig;
34import org.onosproject.net.config.basics.InterfaceConfig;
Yuta HIGUCHI7438f5a2017-02-15 22:09:46 -080035import org.onosproject.net.config.basics.PortAnnotationConfig;
Thomas Vachuska4998caa2015-08-26 13:28:38 -070036import org.onosproject.net.config.basics.SubjectFactories;
Simon Huntf59d36b2016-10-04 19:05:53 -070037import org.onosproject.net.region.RegionId;
Simon Huntd7395c82016-10-20 17:54:01 -070038import org.onosproject.ui.model.topo.UiTopoLayoutId;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070039import org.osgi.service.component.annotations.Activate;
40import org.osgi.service.component.annotations.Component;
41import org.osgi.service.component.annotations.Deactivate;
42import org.osgi.service.component.annotations.Reference;
43import org.osgi.service.component.annotations.ReferenceCardinality;
Thomas Vachuska96d55b12015-05-11 08:52:03 -070044import org.slf4j.Logger;
45import org.slf4j.LoggerFactory;
46
47import java.util.Set;
48
Simon Huntf59d36b2016-10-04 19:05:53 -070049import static org.onosproject.net.config.basics.SubjectFactories.CONNECT_POINT_SUBJECT_FACTORY;
50import static org.onosproject.net.config.basics.SubjectFactories.DEVICE_SUBJECT_FACTORY;
51import static org.onosproject.net.config.basics.SubjectFactories.HOST_SUBJECT_FACTORY;
Simon Huntd7395c82016-10-20 17:54:01 -070052import static org.onosproject.net.config.basics.SubjectFactories.LAYOUT_SUBJECT_FACTORY;
Simon Huntf59d36b2016-10-04 19:05:53 -070053import static org.onosproject.net.config.basics.SubjectFactories.LINK_SUBJECT_FACTORY;
54import static org.onosproject.net.config.basics.SubjectFactories.REGION_SUBJECT_FACTORY;
Thomas Vachuska96d55b12015-05-11 08:52:03 -070055
56/**
57 * Component for registration of builtin basic network configurations.
58 */
Ray Milkeyd84f89b2018-08-17 14:54:17 -070059@Component(immediate = true, service = BasicNetworkConfigService.class)
Jonathan Hartc43fd1c2016-01-18 20:02:20 -080060public class BasicNetworkConfigs implements BasicNetworkConfigService {
Thomas Vachuska96d55b12015-05-11 08:52:03 -070061
Simon Huntf59d36b2016-10-04 19:05:53 -070062 private static final String BASIC = "basic";
63 private static final String INTERFACES = "interfaces";
Andrea Campanella75ef9f52017-07-27 20:14:32 +020064 private static final String PORTS = "ports";
Simon Huntf59d36b2016-10-04 19:05:53 -070065
Thomas Vachuska96d55b12015-05-11 08:52:03 -070066 private final Logger log = LoggerFactory.getLogger(getClass());
67
68 private final Set<ConfigFactory> factories = ImmutableSet.of(
69 new ConfigFactory<DeviceId, BasicDeviceConfig>(DEVICE_SUBJECT_FACTORY,
Palash Kalaa06a6162017-11-15 20:42:40 +090070 BasicDeviceConfig.class,
71 BASIC) {
Thomas Vachuska96d55b12015-05-11 08:52:03 -070072 @Override
73 public BasicDeviceConfig createConfig() {
74 return new BasicDeviceConfig();
75 }
76 },
Jonathan Harteb8c9472015-08-05 07:43:13 -070077 new ConfigFactory<ConnectPoint, InterfaceConfig>(CONNECT_POINT_SUBJECT_FACTORY,
Palash Kalaa06a6162017-11-15 20:42:40 +090078 InterfaceConfig.class,
79 INTERFACES,
80 true) {
Jonathan Hart111b42b2015-07-14 13:28:05 -070081 @Override
Jonathan Harteb8c9472015-08-05 07:43:13 -070082 public InterfaceConfig createConfig() {
83 return new InterfaceConfig();
Jonathan Hart111b42b2015-07-14 13:28:05 -070084 }
85 },
Thomas Vachuska96d55b12015-05-11 08:52:03 -070086 new ConfigFactory<HostId, BasicHostConfig>(HOST_SUBJECT_FACTORY,
Palash Kalaa06a6162017-11-15 20:42:40 +090087 BasicHostConfig.class,
88 BASIC) {
Thomas Vachuska96d55b12015-05-11 08:52:03 -070089 @Override
90 public BasicHostConfig createConfig() {
91 return new BasicHostConfig();
92 }
93 },
94 new ConfigFactory<LinkKey, BasicLinkConfig>(LINK_SUBJECT_FACTORY,
Palash Kalaa06a6162017-11-15 20:42:40 +090095 BasicLinkConfig.class,
96 BasicLinkConfig.CONFIG_KEY) {
Thomas Vachuska96d55b12015-05-11 08:52:03 -070097 @Override
98 public BasicLinkConfig createConfig() {
99 return new BasicLinkConfig();
100 }
Simon Huntf59d36b2016-10-04 19:05:53 -0700101 },
102 new ConfigFactory<RegionId, BasicRegionConfig>(REGION_SUBJECT_FACTORY,
Palash Kalaa06a6162017-11-15 20:42:40 +0900103 BasicRegionConfig.class,
104 BASIC) {
Simon Huntf59d36b2016-10-04 19:05:53 -0700105 @Override
106 public BasicRegionConfig createConfig() {
107 return new BasicRegionConfig();
108 }
Simon Huntd7395c82016-10-20 17:54:01 -0700109 },
110 new ConfigFactory<UiTopoLayoutId, BasicUiTopoLayoutConfig>(LAYOUT_SUBJECT_FACTORY,
Palash Kalaa06a6162017-11-15 20:42:40 +0900111 BasicUiTopoLayoutConfig.class,
112 BASIC) {
Simon Huntd7395c82016-10-20 17:54:01 -0700113 @Override
114 public BasicUiTopoLayoutConfig createConfig() {
115 return new BasicUiTopoLayoutConfig();
116 }
Yuta HIGUCHI7438f5a2017-02-15 22:09:46 -0800117 },
118 new ConfigFactory<ConnectPoint, PortAnnotationConfig>(CONNECT_POINT_SUBJECT_FACTORY,
Palash Kalaa06a6162017-11-15 20:42:40 +0900119 PortAnnotationConfig.class,
120 PortAnnotationConfig.CONFIG_KEY) {
Yuta HIGUCHI7438f5a2017-02-15 22:09:46 -0800121 @Override
122 public PortAnnotationConfig createConfig() {
123 return new PortAnnotationConfig();
124 }
Andrea Campanella75ef9f52017-07-27 20:14:32 +0200125 },
126 new ConfigFactory<DeviceId, PortDescriptionsConfig>(DEVICE_SUBJECT_FACTORY,
Palash Kalaa06a6162017-11-15 20:42:40 +0900127 PortDescriptionsConfig.class,
128 PORTS) {
Andrea Campanella75ef9f52017-07-27 20:14:32 +0200129 @Override
130 public PortDescriptionsConfig createConfig() {
131 return new PortDescriptionsConfig();
132 }
Palash Kalaa06a6162017-11-15 20:42:40 +0900133 },
134 new ConfigFactory<DeviceId, DeviceAnnotationConfig>(DEVICE_SUBJECT_FACTORY,
135 DeviceAnnotationConfig.class,
136 DeviceAnnotationConfig.CONFIG_KEY) {
137 @Override
138 public DeviceAnnotationConfig createConfig() {
139 return new DeviceAnnotationConfig();
140 }
Thomas Vachuska96d55b12015-05-11 08:52:03 -0700141 }
Andrea Campanella75ef9f52017-07-27 20:14:32 +0200142
Thomas Vachuska96d55b12015-05-11 08:52:03 -0700143 );
144
Ray Milkeyd84f89b2018-08-17 14:54:17 -0700145 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Thomas Vachuska9fadbfc2015-07-23 10:56:02 -0700146 protected CoreService coreService;
147
Ray Milkeyd84f89b2018-08-17 14:54:17 -0700148 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Thomas Vachuska96d55b12015-05-11 08:52:03 -0700149 protected NetworkConfigRegistry registry;
150
151 @Activate
152 public void activate() {
Thomas Vachuska9fadbfc2015-07-23 10:56:02 -0700153 SubjectFactories.setCoreService(coreService);
Thomas Vachuska96d55b12015-05-11 08:52:03 -0700154 factories.forEach(registry::registerConfigFactory);
155 log.info("Started");
156 }
157
158 @Deactivate
159 public void deactivate() {
160 factories.forEach(registry::unregisterConfigFactory);
161 log.info("Stopped");
162 }
163
164}