/******************************************************************************* * Copyright (c) 2011, 2016 Eurotech and/or its affiliates * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Eurotech *******************************************************************************/ package org.eclipse.kura.net.admin; import java.util.ArrayList; import java.util.Dictionary; import java.util.HashMap; import java.util.Hashtable; import java.util.List; import java.util.Map; import java.util.StringTokenizer; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import org.eclipse.kura.KuraErrorCode; import org.eclipse.kura.KuraException; import org.eclipse.kura.configuration.ComponentConfiguration; import org.eclipse.kura.configuration.KuraConfigReadyEvent; import org.eclipse.kura.configuration.KuraNetConfigReadyEvent; import org.eclipse.kura.configuration.SelfConfiguringComponent; import org.eclipse.kura.core.configuration.ComponentConfigurationImpl; import org.eclipse.kura.core.configuration.metatype.ObjectFactory; import org.eclipse.kura.core.configuration.metatype.Tad; import org.eclipse.kura.core.configuration.metatype.Tocd; import org.eclipse.kura.core.configuration.metatype.Tscalar; import org.eclipse.kura.core.net.EthernetInterfaceConfigImpl; import org.eclipse.kura.core.net.LoopbackInterfaceConfigImpl; import org.eclipse.kura.core.net.NetworkConfiguration; import org.eclipse.kura.core.net.NetworkConfigurationVisitor; import org.eclipse.kura.core.net.WifiInterfaceConfigImpl; import org.eclipse.kura.core.net.WifiInterfaceImpl; import org.eclipse.kura.core.net.modem.ModemInterfaceConfigImpl; import org.eclipse.kura.core.net.modem.ModemInterfaceImpl; import org.eclipse.kura.linux.net.modem.SupportedSerialModemInfo; import org.eclipse.kura.linux.net.modem.SupportedSerialModemsInfo; import org.eclipse.kura.linux.net.modem.UsbModemDriver; import org.eclipse.kura.linux.net.util.LinuxNetworkUtil; import org.eclipse.kura.net.EthernetInterface; import org.eclipse.kura.net.LoopbackInterface; import org.eclipse.kura.net.NetInterface; import org.eclipse.kura.net.NetInterfaceAddress; import org.eclipse.kura.net.NetInterfaceType; import org.eclipse.kura.net.NetworkService; import org.eclipse.kura.net.admin.event.NetworkConfigurationChangeEvent; import org.eclipse.kura.net.admin.modem.SupportedUsbModemsFactoryInfo; import org.eclipse.kura.net.admin.visitor.linux.LinuxReadVisitor; import org.eclipse.kura.net.admin.visitor.linux.LinuxWriteVisitor; import org.eclipse.kura.net.modem.CellularModem; import org.eclipse.kura.net.modem.ModemManagerService; import org.eclipse.kura.usb.UsbModemDevice; import org.eclipse.kura.usb.UsbNetDevice; import org.eclipse.kura.usb.UsbService; import org.osgi.service.component.ComponentContext; import org.osgi.service.event.Event; import org.osgi.service.event.EventAdmin; import org.osgi.service.event.EventConstants; import org.osgi.service.event.EventHandler; import org.osgi.service.event.EventProperties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class NetworkConfigurationServiceImpl implements NetworkConfigurationService, SelfConfiguringComponent, EventHandler { public static final String UNCONFIGURED_MODEM_REGEX = "^\\d+-\\d+(\\.\\d+)*$"; private static final Logger s_logger = LoggerFactory.getLogger(NetworkConfigurationServiceImpl.class); private final static String[] EVENT_TOPICS = { KuraConfigReadyEvent.KURA_CONFIG_EVENT_READY_TOPIC }; private NetworkService m_networkService; private EventAdmin m_eventAdmin; private UsbService m_usbService; private ModemManagerService m_modemManagerService; private List<NetworkConfigurationVisitor> m_readVisitors; private List<NetworkConfigurationVisitor> m_writeVisitors; private ScheduledExecutorService m_executorUtil; private boolean m_firstConfig = true; // ---------------------------------------------------------------- // // Dependencies // // ---------------------------------------------------------------- public void setNetworkService(NetworkService networkService) { this.m_networkService = networkService; } public void unsetNetworkService(NetworkService networkService) { this.m_networkService = null; } public void setEventAdmin(EventAdmin eventAdmin) { this.m_eventAdmin = eventAdmin; } public void unsetEventAdmin(EventAdmin eventAdmin) { this.m_eventAdmin = null; } public void setUsbService(UsbService usbService) { this.m_usbService = usbService; } public void unsetUsbService(UsbService usbService) { this.m_usbService = null; } public void setModemManagerService(ModemManagerService modemManagerService) { s_logger.debug("Set the modem manager service"); this.m_modemManagerService = modemManagerService; } public void unsetModemManagerService(ModemManagerService modemManagerService) { s_logger.debug("Unset the modem manager service"); this.m_modemManagerService = null; } // ---------------------------------------------------------------- // // Activation APIs // // ---------------------------------------------------------------- /* * Do not have a default activate for this self configuring component because we are not using it at startup * protected void activate(ComponentContext componentContext) {} */ protected void activate(ComponentContext componentContext, Map<String, Object> properties) { s_logger.debug("activate(componentContext, properties)..."); Dictionary<String, String[]> d = new Hashtable<String, String[]>(); d.put(EventConstants.EVENT_TOPIC, EVENT_TOPICS); componentContext.getBundleContext().registerService(EventHandler.class.getName(), this, d); this.m_executorUtil = Executors.newSingleThreadScheduledExecutor(); this.m_executorUtil.schedule(new Runnable() { @Override public void run() { // make sure we don't miss the setting of firstConfig NetworkConfigurationServiceImpl.this.m_firstConfig = false; } }, 3, TimeUnit.MINUTES); this.m_readVisitors = new ArrayList<NetworkConfigurationVisitor>(); this.m_readVisitors.add(LinuxReadVisitor.getInstance()); this.m_writeVisitors = new ArrayList<NetworkConfigurationVisitor>(); this.m_writeVisitors.add(LinuxWriteVisitor.getInstance()); // we are intentionally ignoring the properties from ConfigAdmin at startup if (properties == null) { s_logger.debug("Got null properties..."); } else { s_logger.debug("Props...{}", properties); } } protected void deactivate(ComponentContext componentContext) { s_logger.debug("deactivate()"); this.m_writeVisitors = null; this.m_readVisitors = null; this.m_executorUtil.shutdownNow(); } @Override public void handleEvent(Event event) { s_logger.debug("handleEvent - topic: {}", event.getTopic()); String topic = event.getTopic(); if (topic.equals(KuraConfigReadyEvent.KURA_CONFIG_EVENT_READY_TOPIC)) { this.m_firstConfig = false; this.m_executorUtil.schedule(new Runnable() { @Override public void run() { Map<String, Object> props = new HashMap<String, Object>(); EventProperties eventProps = new EventProperties(props); s_logger.info("postInstalledEvent() :: posting KuraNetConfigReadyEvent"); NetworkConfigurationServiceImpl.this.m_eventAdmin.postEvent( new Event(KuraNetConfigReadyEvent.KURA_NET_CONFIG_EVENT_READY_TOPIC, eventProps)); } }, 5, TimeUnit.SECONDS); } } @Override public void setNetworkConfiguration(NetworkConfiguration networkConfiguration) throws KuraException { updated(networkConfiguration.getConfigurationProperties()); } public synchronized void updated(Map<String, Object> properties) { // skip the first config if (this.m_firstConfig) { s_logger.debug("Ignoring first configuration"); this.m_firstConfig = false; return; } try { if (properties != null) { s_logger.debug("new properties - updating"); s_logger.debug("modified.interface.names: {}", properties.get("modified.interface.names")); // dynamically insert the type properties.. Map<String, Object> modifiedProps = new HashMap<String, Object>(); modifiedProps.putAll(properties); String interfaces = (String) properties.get("net.interfaces"); StringTokenizer st = new StringTokenizer(interfaces, ","); while (st.hasMoreTokens()) { String interfaceName = st.nextToken(); StringBuilder sb = new StringBuilder(); sb.append("net.interface.").append(interfaceName).append(".type"); NetInterfaceType type = LinuxNetworkUtil.getType(interfaceName); if (type == NetInterfaceType.UNKNOWN) { if (interfaceName.matches(UNCONFIGURED_MODEM_REGEX)) { // If the interface name is in a form such as "1-3.4" (USB address), assume it is a modem type = NetInterfaceType.MODEM; } else { SupportedSerialModemInfo serialModemInfo = SupportedSerialModemsInfo.getModem(); if (serialModemInfo != null && serialModemInfo.getModemName().equals(interfaceName)) { type = NetInterfaceType.MODEM; } } } modifiedProps.put(sb.toString(), type.toString()); } NetworkConfiguration networkConfig = new NetworkConfiguration(modifiedProps); for (NetworkConfigurationVisitor visitor : this.m_writeVisitors) { networkConfig.accept(visitor); } // raise the event because there was a change this.m_eventAdmin.postEvent(new NetworkConfigurationChangeEvent(modifiedProps)); } else { s_logger.debug("properties are null"); } } catch (Exception e) { // TODO - would still want an event if partially successful? s_logger.error("Error updating the configuration", e); } } @Override public synchronized ComponentConfiguration getConfiguration() throws KuraException { s_logger.debug("getConfiguration()"); try { NetworkConfiguration networkConfiguration = getNetworkConfiguration(); return new ComponentConfigurationImpl(PID, getDefinition(), networkConfiguration.getConfigurationProperties()); } catch (Exception e) { throw new KuraException(KuraErrorCode.INTERNAL_ERROR, e); } } // @Override // FIXME:MC Introducing a short lived cache will make startup much faster. @Override public synchronized NetworkConfiguration getNetworkConfiguration() throws KuraException { NetworkConfiguration networkConfiguration = new NetworkConfiguration(); // Get the current values List<NetInterface<? extends NetInterfaceAddress>> allNetworkInterfaces = this.m_networkService .getNetworkInterfaces(); Map<String, NetInterface<? extends NetInterfaceAddress>> allNetworkInterfacesMap = new HashMap<String, NetInterface<? extends NetInterfaceAddress>>(); Map<String, NetInterface<? extends NetInterfaceAddress>> activeNetworkInterfacesMap = new HashMap<String, NetInterface<? extends NetInterfaceAddress>>(); for (NetInterface<? extends NetInterfaceAddress> netInterface : allNetworkInterfaces) { allNetworkInterfacesMap.put(netInterface.getName(), netInterface); if (netInterface.isUp()) { activeNetworkInterfacesMap.put(netInterface.getName(), netInterface); } } // Create the NetInterfaceConfig objects if (allNetworkInterfacesMap.keySet() != null) { for (NetInterface<? extends NetInterfaceAddress> netInterface : allNetworkInterfacesMap.values()) { String interfaceName = netInterface.getName(); try { // ignore mon interface if (interfaceName.startsWith("mon.")) { continue; } // ignore redpine vlan interface if (interfaceName.startsWith("rpine")) { continue; } // ignore usb0 for beaglebone if (interfaceName.startsWith("usb0") && System.getProperty("target.device").equals("beaglebone")) { continue; } NetInterfaceType type = netInterface.getType(); if (type == NetInterfaceType.UNKNOWN) { if (interfaceName.matches(UNCONFIGURED_MODEM_REGEX)) { // If the interface name is in a form such as "1-3.4", assume it is a modem type = NetInterfaceType.MODEM; } else { SupportedSerialModemInfo serialModemInfo = SupportedSerialModemsInfo.getModem(); if (serialModemInfo != null && serialModemInfo.getModemName().equals(interfaceName)) { type = NetInterfaceType.MODEM; } } } s_logger.debug("Getting config for {} type: {}", interfaceName, type); switch (type) { case LOOPBACK: LoopbackInterface<? extends NetInterfaceAddress> activeLoopInterface = (LoopbackInterface<? extends NetInterfaceAddress>) netInterface; LoopbackInterfaceConfigImpl loopbackInterfaceConfig = null; loopbackInterfaceConfig = new LoopbackInterfaceConfigImpl(activeLoopInterface); networkConfiguration.addNetInterfaceConfig(loopbackInterfaceConfig); break; case ETHERNET: EthernetInterface<? extends NetInterfaceAddress> activeEthInterface = (EthernetInterface<? extends NetInterfaceAddress>) netInterface; EthernetInterfaceConfigImpl ethernetInterfaceConfig = null; ethernetInterfaceConfig = new EthernetInterfaceConfigImpl(activeEthInterface); networkConfiguration.addNetInterfaceConfig(ethernetInterfaceConfig); break; case WIFI: WifiInterfaceImpl<? extends NetInterfaceAddress> activeWifiInterface = (WifiInterfaceImpl<? extends NetInterfaceAddress>) netInterface; WifiInterfaceConfigImpl wifiInterfaceConfig = null; wifiInterfaceConfig = new WifiInterfaceConfigImpl(activeWifiInterface); networkConfiguration.addNetInterfaceConfig(wifiInterfaceConfig); break; case MODEM: ModemInterfaceImpl<? extends NetInterfaceAddress> activeModemInterface = (ModemInterfaceImpl<? extends NetInterfaceAddress>) netInterface; addPropertiesInModemInterface(activeModemInterface); ModemInterfaceConfigImpl modemInterfaceConfig = null; modemInterfaceConfig = new ModemInterfaceConfigImpl(activeModemInterface); networkConfiguration.addNetInterfaceConfig(modemInterfaceConfig); break; case UNKNOWN: s_logger.debug("Found interface of unknown type in current configuration: {}. Ignoring it.", interfaceName); break; default: s_logger.debug("Unsupported type: {} - not adding to configuration. Ignoring it.", type); } } catch (Exception e) { s_logger.warn("Error fetching information for network interface: {}", interfaceName, e); } } } // populate the NetInterfaceConfigs for (NetworkConfigurationVisitor visitor : this.m_readVisitors) { networkConfiguration.accept(visitor); } return networkConfiguration; } private void addPropertiesInModemInterface(ModemInterfaceImpl<? extends NetInterfaceAddress> modemInterface) throws KuraException { String interfaceName = modemInterface.getName(); if (this.m_modemManagerService != null) { String modemPort = this.m_networkService.getModemUsbPort(interfaceName); if (modemPort == null) { modemPort = interfaceName; } CellularModem modem = this.m_modemManagerService.getModemService(modemPort); if (modem != null) { // set modem properties modemInterface.setSerialNumber(modem.getSerialNumber()); modemInterface.setModel(modem.getModel()); modemInterface.setFirmwareVersion(modem.getRevisionID()); modemInterface.setGpsSupported(modem.isGpsSupported()); // set modem driver UsbModemDevice usbModemDevice = (UsbModemDevice) modemInterface.getUsbDevice(); if (usbModemDevice != null) { List<? extends UsbModemDriver> drivers = null; drivers = SupportedUsbModemsFactoryInfo.getDeviceDrivers(usbModemDevice.getVendorId(), usbModemDevice.getProductId()); if (drivers != null && drivers.size() > 0) { UsbModemDriver driver = drivers.get(0); modemInterface.setDriver(driver.getName()); } } } } } private Tocd getDefinition() throws KuraException { ObjectFactory objectFactory = new ObjectFactory(); Tocd tocd = objectFactory.createTocd(); tocd.setName("NetworkConfigurationService"); tocd.setId("org.eclipse.kura.net.admin.NetworkConfigurationService"); tocd.setDescription("Network Configuration Service"); // get the USB network interfaces (if any) List<UsbNetDevice> usbNetDevices = this.m_usbService.getUsbNetDevices(); Tad tad = objectFactory.createTad(); tad.setId("net.interfaces"); tad.setName("net.interfaces"); tad.setType(Tscalar.STRING); tad.setCardinality(10000); tad.setRequired(true); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages.getMessage(NetworkAdminConfiguration.PLATFORM_INTERFACES)); tocd.addAD(tad); // Get the network interfaces on the platform try { List<String> networkInterfaceNames = LinuxNetworkUtil.getAllInterfaceNames(); for (String ifaceName : networkInterfaceNames) { // get the current configuration for this interface NetInterfaceType type = LinuxNetworkUtil.getType(ifaceName); String prefix = "net.interface."; if (type == NetInterfaceType.LOOPBACK) { tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.mtu").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName).append(".config.mtu").toString()); tad.setType(Tscalar.INTEGER); tad.setCardinality(0); tad.setRequired(true); tad.setDefault(""); tad.setDescription( NetworkAdminConfigurationMessages.getMessage(NetworkAdminConfiguration.CONFIG_MTU)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.autoconnect") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName).append(".config.autoconnect") .toString()); tad.setType(Tscalar.BOOLEAN); tad.setCardinality(0); tad.setRequired(true); tad.setDefault(""); tad.setDescription( NetworkAdminConfigurationMessages.getMessage(NetworkAdminConfiguration.CONFIG_AUTOCONNECT)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.driver").toString()); tad.setName( new StringBuffer().append(prefix).append(ifaceName).append(".config.driver").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription( NetworkAdminConfigurationMessages.getMessage(NetworkAdminConfiguration.CONFIG_DRIVER)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.ip4.address") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName).append(".config.ip4.address") .toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_IPV4_ADDRESS)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.ip4.prefix") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName).append(".config.ip4.prefix") .toString()); tad.setType(Tscalar.SHORT); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription( NetworkAdminConfigurationMessages.getMessage(NetworkAdminConfiguration.CONFIG_IPV4_PREFIX)); tocd.addAD(tad); } else if (type == NetInterfaceType.ETHERNET || type == NetInterfaceType.WIFI) { if (usbNetDevices != null) { for (UsbNetDevice usbNetDevice : usbNetDevices) { if (usbNetDevice.getInterfaceName().equals(ifaceName)) { // found a match - add the read only fields? tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".usb.port") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName).append(".usb.port") .toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.USB_PORT)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".usb.manufacturer").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".usb.manfacturer").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.USB_MANUFACTURER)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".usb.product") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName).append(".usb.product") .toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.USB_PRODUCT)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".usb.manufacturer.id").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".usb.manfacturer.id").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.USB_MANUFACTURER_ID)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".usb.product.id") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".usb.product.id").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.USB_PRODUCT_ID)); tocd.addAD(tad); // no need to continue break; } } } tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.mtu").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName).append(".config.mtu").toString()); tad.setType(Tscalar.INTEGER); tad.setCardinality(0); tad.setRequired(true); tad.setDefault(""); tad.setDescription( NetworkAdminConfigurationMessages.getMessage(NetworkAdminConfiguration.CONFIG_MTU)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.autoconnect") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName).append(".config.autoconnect") .toString()); tad.setType(Tscalar.BOOLEAN); tad.setCardinality(0); tad.setRequired(true); tad.setDefault(""); tad.setDescription( NetworkAdminConfigurationMessages.getMessage(NetworkAdminConfiguration.CONFIG_AUTOCONNECT)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.dhcpClient4.enabled") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.dhcpClient4.enabled").toString()); tad.setType(Tscalar.BOOLEAN); tad.setCardinality(0); tad.setRequired(true); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_IPV4_DHCP_CLIENT_ENABLED)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.ip4.address") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName).append(".config.ip4.address") .toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_IPV4_ADDRESS)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.ip4.prefix") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName).append(".config.ip4.prefix") .toString()); tad.setType(Tscalar.SHORT); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription( NetworkAdminConfigurationMessages.getMessage(NetworkAdminConfiguration.CONFIG_IPV4_PREFIX)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.ip4.gateway") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName).append(".config.ip4.gateway") .toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_IPV4_GATEWAY)); tocd.addAD(tad); // DNS and WINS tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.dnsServers") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName).append(".config.dnsServers") .toString()); tad.setType(Tscalar.STRING); tad.setCardinality(10000); tad.setRequired(false); tad.setDefault(""); tad.setDescription( NetworkAdminConfigurationMessages.getMessage(NetworkAdminConfiguration.CONFIG_DNS_SERVERS)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.winsServers") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName).append(".config.winsServers") .toString()); tad.setType(Tscalar.STRING); tad.setCardinality(10000); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_WINS_SERVERS)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.dhcpServer4.enabled") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.dhcpServer4.enabled").toString()); tad.setType(Tscalar.BOOLEAN); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_IPV4_DHCP_SERVER_ENABLED)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".config.dhcpServer4.defaultLeaseTime").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.dhcpServer4.defaultLeaseTime").toString()); tad.setType(Tscalar.INTEGER); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_IPV4_DHCP_SERVER_DEFAULT_LEASE_TIME)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".config.dhcpServer4.maxLeaseTime").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.dhcpServer4.maxLeaseTime").toString()); tad.setType(Tscalar.INTEGER); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_IPV4_DHCP_SERVER_MAX_LEASE_TIME)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.dhcpServer4.prefix") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName).append(".config.dhcpServer4.prefix") .toString()); tad.setType(Tscalar.SHORT); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_IPV4_DHCP_SERVER_PREFIX)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".config.dhcpServer4.rangeStart").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.dhcpServer4.rangeStart").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_IPV4_DHCP_SERVER_RANGE_START)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.dhcpServer4.rangeEnd") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.dhcpServer4.rangeEnd").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_IPV4_DHCP_SERVER_RANGE_END)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.dhcpServer4.passDns") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.dhcpServer4.passDns").toString()); tad.setType(Tscalar.BOOLEAN); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_IPV4_DHCP_SERVER_PASS_DNS)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.nat.enabled") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName).append(".config.nat.enabled") .toString()); tad.setType(Tscalar.BOOLEAN); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_IPV4_DHCP_SERVER_NAT_ENABLED)); tocd.addAD(tad); if (type == NetInterfaceType.WIFI) { // Common tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".wifi.capabilities") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName).append(".wifi.capabilities") .toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.WIFI_CAPABILITIES)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.wifi.mode") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName).append(".config.wifi.mode") .toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_WIFI_MODE)); tocd.addAD(tad); // INFRA tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.wifi.infra.ssid") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.infra.ssid").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_WIFI_INFRA_SSID)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.infra.hardwareMode").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.infra.hardwareMode").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_WIFI_INFRA_HARDWARE_MODE)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.infra.radioMode").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.infra.radioMode").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_WIFI_INFRA_HARDWARE_MODE)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.infra.securityType").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.infra.securityType").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_WIFI_INFRA_SECURITY_TYPE)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.infra.passphrase").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.infra.passphrase").toString()); tad.setType(Tscalar.PASSWORD); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_WIFI_INFRA_PASSPHRASE)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.infra.pairwiseCiphers").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.infra.pairwiseCiphers").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_WIFI_INFRA_PAIRWISE_CIPHERS)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.infra.groupCiphers").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.infra.groupCiphers").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_WIFI_INFRA_GROUP_CIPHERS)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.infra.channel").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.infra.channel").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_WIFI_INFRA_CHANNEL)); tocd.addAD(tad); // MASTER tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName).append(".config.wifi.master.ssid") .toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.master.ssid").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_WIFI_MASTER_SSID)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.master.broadcast").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.master.broadcast").toString()); tad.setType(Tscalar.BOOLEAN); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_WIFI_MASTER_BROADCAST_ENABLED)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.master.hardwareMode").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.master.hardwareMode").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_WIFI_MASTER_HARDWARE_MODE)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.master.radioMode").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.master.radioMode").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_WIFI_MASTER_HARDWARE_MODE)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.master.securityType").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.master.securityType").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_WIFI_MASTER_SECURITY_TYPE)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.master.passphrase").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.master.passphrase").toString()); tad.setType(Tscalar.PASSWORD); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_WIFI_MASTER_PASSPHRASE)); tocd.addAD(tad); tad = objectFactory.createTad(); tad.setId(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.master.channel").toString()); tad.setName(new StringBuffer().append(prefix).append(ifaceName) .append(".config.wifi.master.channel").toString()); tad.setType(Tscalar.STRING); tad.setCardinality(0); tad.setRequired(false); tad.setDefault(""); tad.setDescription(NetworkAdminConfigurationMessages .getMessage(NetworkAdminConfiguration.CONFIG_WIFI_MASTER_CHANNEL)); tocd.addAD(tad); /* * // ADHOC * tad = objectFactory.createTad(); * tad.setId((new * StringBuffer().append(prefix).append(ifaceName).append(".config.wifi.adhoc.ssid")).toString() * ); * tad.setName((new * StringBuffer().append(prefix).append(ifaceName).append(".config.wifi.adhoc.ssid")).toString() * ); * tad.setType(Tscalar.STRING); * tad.setCardinality(0); * tad.setRequired(false); * tad.setDefault(""); * tad.setDescription(NetworkAdminConfigurationMessages.getMessage(NetworkAdminConfiguration. * CONFIG_WIFI_ADHOC_SSID)); * tocd.addAD(tad); * * tad = objectFactory.createTad(); * tad.setId((new * StringBuffer().append(prefix).append(ifaceName).append(".config.wifi.adhoc.hardwareMode")). * toString()); * tad.setName((new * StringBuffer().append(prefix).append(ifaceName).append(".config.wifi.adhoc.hardwareMode")). * toString()); * tad.setType(Tscalar.STRING); * tad.setCardinality(0); * tad.setRequired(false); * tad.setDefault(""); * tad.setDescription(NetworkAdminConfigurationMessages.getMessage(NetworkAdminConfiguration. * CONFIG_WIFI_ADHOC_HARDWARE_MODE)); * tocd.addAD(tad); * * tad = objectFactory.createTad(); * tad.setId((new * StringBuffer().append(prefix).append(ifaceName).append(".config.wifi.adhoc.radioMode")). * toString()); * tad.setName((new * StringBuffer().append(prefix).append(ifaceName).append(".config.wifi.adhoc.radioMode")). * toString()); * tad.setType(Tscalar.STRING); * tad.setCardinality(0); * tad.setRequired(false); * tad.setDefault(""); * tad.setDescription(NetworkAdminConfigurationMessages.getMessage(NetworkAdminConfiguration. * CONFIG_WIFI_ADHOC_HARDWARE_MODE)); * tocd.addAD(tad); * * tad = objectFactory.createTad(); * tad.setId((new * StringBuffer().append(prefix).append(ifaceName).append(".config.wifi.adhoc.securityType")). * toString()); * tad.setName((new * StringBuffer().append(prefix).append(ifaceName).append(".config.wifi.adhoc.securityType")). * toString()); * tad.setType(Tscalar.STRING); * tad.setCardinality(0); * tad.setRequired(false); * tad.setDefault(""); * tad.setDescription(NetworkAdminConfigurationMessages.getMessage(NetworkAdminConfiguration. * CONFIG_WIFI_ADHOC_SECURITY_TYPE)); * tocd.addAD(tad); * * tad = objectFactory.createTad(); * tad.setId((new * StringBuffer().append(prefix).append(ifaceName).append(".config.wifi.adhoc.passphrase")). * toString()); * tad.setName((new * StringBuffer().append(prefix).append(ifaceName).append(".config.wifi.adhoc.passphrase")). * toString()); * tad.setType(Tscalar.STRING); * tad.setCardinality(0); * tad.setRequired(false); * tad.setDefault(""); * tad.setDescription(NetworkAdminConfigurationMessages.getMessage(NetworkAdminConfiguration. * CONFIG_WIFI_ADHOC_PASSPHRASE)); * tocd.addAD(tad); * * tad = objectFactory.createTad(); * tad.setId((new * StringBuffer().append(prefix).append(ifaceName).append(".config.wifi.adhoc.channel")). * toString()); * tad.setName((new * StringBuffer().append(prefix).append(ifaceName).append(".config.wifi.adhoc.channel")). * toString()); * tad.setType(Tscalar.STRING); * tad.setCardinality(0); * tad.setRequired(false); * tad.setDefault(""); * tad.setDescription(NetworkAdminConfigurationMessages.getMessage(NetworkAdminConfiguration. * CONFIG_WIFI_ADHOC_CHANNEL)); * tocd.addAD(tad); */ } // TODO - deal with USB devices (READ ONLY) } } } catch (Exception e) { throw new KuraException(KuraErrorCode.CONFIGURATION_ERROR, e); } return tocd; } }