Cleaning up unused code in Microsemi driver

Change-Id: If7e9790d9141324dff084e41d040ba0132141de8
This commit is contained in:
Sean Condon 2017-10-19 12:09:21 +01:00 committed by Thomas Vachuska
parent 2740a1119b
commit 1dbcd71f39
47 changed files with 458 additions and 7265 deletions

View File

@ -4,6 +4,7 @@ COMPILE_DEPS = [
'//drivers/utilities:onos-drivers-utilities',
'//protocols/netconf/api:onos-protocols-netconf-api',
'//protocols/netconf/ctl:onos-protocols-netconf-ctl',
'//models/common:onos-models-common',
'//models/microsemi:onos-models-microsemi',
'//lib:org.apache.karaf.shell.console',
'//incubator/api:onos-incubator-api',
@ -24,6 +25,7 @@ APPS = [
'org.onosproject.netconf',
'org.onosproject.netconfsb',
'org.onosproject.drivers.netconf',
'org.onosproject.models.common',
'org.onosproject.models.microsemi'
]

View File

@ -28,7 +28,7 @@ EA1000 Devices will not be automatically discovered at present in ONOS. They hav
* The name must follow the format **netconf:ipaddr:port**
* The **ip** and **port** must correspond to the ip and port in the name (above).
```json
```js
{
"devices": {
"netconf:192.168.56.10:830": {
@ -36,7 +36,10 @@ EA1000 Devices will not be automatically discovered at present in ONOS. They hav
"username": "admin",
"password": "admin",
"ip": "192.168.56.10",
"port": "830"
"port": 830,
"connect-timeout": 50,
"reply-timeout": 50,
"idle-timeout": 40
},
"basic": {
"driver": "microsemi-netconf",
@ -85,7 +88,7 @@ Currently the EA1000 supports only a limited set of OpenFlow rules through the F
A feature of the EA1000 that may be configured through Flow Rules is IP Source Address Filtering. This can only be activated on Port 0 (the optics Port). An example of this kind of flow is
`POST /onos/v1/flows/ HTTP/1.1`<br/>
```json
```js
{
"flows": [
{
@ -96,8 +99,8 @@ A feature of the EA1000 that may be configured through Flow Rules is IP Source A
"tableId": 8,
"treatment": {
"instructions": [ {"type": "NOACTION"} ],
    "deferred": []
     },
"deferred": []
},
"selector": {
"criteria": [
{"type": "IPV4_SRC", "ip": "192.168.8.0/24"},
@ -115,7 +118,7 @@ A feature of the EA1000 that may be configured through Flow Rules is IP Source A
Flows that Push, Pop or Overwrite VLAN tags are implemented in EA1000 and are treated as MEF Carrier Ethernet EVCs. Both CTags and STags can be pushed on to matching Ethernet packets at network Layer 2.
`POST /onos/v1/flows/ HTTP/1.1`<br/>
```json
```js
{
"flows": [
{
@ -268,7 +271,7 @@ src=netconf:192.168.56.20:830/0, dst=netconf:192.168.56.10:830/0, type=DIRECT, s
This will not exist by default since Link Discovery is not yet a feature of the EA1000 driver. These have to be created manually - through the network/configuration REST API.
`POST /onos/v1/network/configuration/ HTTP/1.1`<br/>
```json
```js
{
"links": {
"netconf:192.168.56.10:830/0-netconf:192.168.56.20:830/0": { // 10 to 20
@ -388,4 +391,105 @@ DefaultMeter{device=netconf:192.168.56.10:830, id=1, appId=org.onosproject.ecord
```
## EVC Deletion
EVCs can be deleted individually with **ce-evc-remove <evc-id>** or all together with **ce-evc-remove-all**.
EVCs can be deleted individually with **ce-evc-remove <evc-id>** or all together with **ce-evc-remove-all**.
# Support for Layer 2 Monitoring
EA1000 supports both Connectivity Fault Management (CFM) and MEF Services OAM. This is achieved through the EA1000 driver supporting the ONOS behaviors CfmMepProgrammable and SoamDmProgrammable described in [Layer 2 Monitoring with CFM and Services OAM](https://wiki.onosproject.org/display/ONOS/Layer+2+Monitoring+with+CFM+and+Services+OAM).
With EA1000 the CFM entities (Maintenance Association Endpoints or MEPs) are created in parallel with the EVC services that they are designed to test, and related loosely to each other only through VLAN ID.
For instance an EVC might be created with a VLAN of 101, and separately a Maintenance Association would be created with the same VLAN ID, and MEPs created under this for monitoring that VLAN (and by inference that EVC).
The CFM interface to ONOS is exposed through a REST API at /onos/cfm
In ONOS Maintenance Domains and Maintenance Associations beneath them are created and persisted in a distributed datastore. These are logical entities that can span across an ONOS cluster and are not directly related to devices.
The Maintenance Association Endpoint - MEP (the child of the Maintenance Association, and grandchild of the Maintenance Domain) is also a logical entity but has a hard many:1 association to a device that supports the CfmMepProgrammable behaviour. EA1000 is one such device, and so one to many MEPs can be associated with an EA1000 device.
For example to create an Maintenance Domain in ONOS the following might be POSTed to
`POST http://localhost:8181/onos/cfm/md HTTP/1.1`</br>
```js
{"md": {
"mdName": "Microsemi",
"mdNameType": "CHARACTERSTRING",
"mdLevel": "LEVEL3",
"mdNumericId": 1
}
}
```
To create a Maintenance Association under this
`POST http://localhost:8181/onos/cfm/md/Microsemi/ma HTTP/1.1`</br>
```js
{
"ma": {
"maName": "ma-vlan-1",
"maNameType": "CHARACTERSTRING",
"maNumericId": 1,
"ccm-interval": "INTERVAL_1S",
"component-list": [
{ "component": {
"component-id":"1",
"tag-type": "VLAN_STAG",
"vid-list": [
{"vid":1}
]
}
}
],
"rmep-list": [
{ "rmep":10 },
{ "rmep":20 },
{ "rmep":30 }
]
}
}
```
To create a MEP under this:
`POST http://localhost:8181/onos/cfm/md/Microsemi/ma/ma-vlan-1/mep HTTP/1.1`</br>
```js
{
"mep": {
"mepId": 10,
"deviceId": "netconf:10.205.86.26:830",
"port": 0,
"direction": "DOWN_MEP",
"primary-vid": 1,
"administrative-state": true,
"ccm-ltm-priority": 4,
"cci-enabled" :true
}
}
```
When the MEP is created a configuration is written down to the EA1000 device at 10.205.86.26 through NETCONF roughly in the format:
```xml
<maintenance-domain>
<id>1</id>
<name>Microsemi</name>
<name-type>CHARACTER_STRING</name-type>
<md-level>3</md-level>
<maintenance-association>
<id>1</id>
<name>ma-vlan-1</name>
<name-type>CHARACTER_STRING</name-type>
<component-list>
<tag-type>vlan-stag</tag-type>
<vid>1</vid>
</component-list>
<remote-mep>10</remote-mep>
<remote-mep>20</remote-mep>
<remote-mep>30</remote-mep>
<maintenance-association-endpoint>
<mep-identifier>10</mep-identifier>
...
</maintenance-association-endpoint>
</maintenance-association>
</maintenance-domain>
```
There are a few things to note here:
* On EA1000 the MD and MA are indexed by their _id_ and not by name. This means that it is essential when working with EA1000 that all MD's and MA's have a numeric ID specified, and that the numeric IDs of Maintenance Domains should be unique. The numeric IDs of Maintenance Associations should be unique _within_ Maintenance Domains.
* The component list is flattened down to a singleton object. While in the CFM model many Components are possible, EA1000 supports only 1
* With Remote Meps - the local and all remote meps must be specified by their ID. In this instance 10 is the local on device 10.205.86.26 and 20 and 30 are remote meps that we expect will be local to some other devices
* Even though the write to the EA1000 only happens when the MEP is created it brings down the MD and MA to the device with it.
* When the MEP is deleted the MD and MA are left behind on the device. If the MD and MA were then to be changed in ONOS and a new MEP pushed down to the device, there would be an error, as the MD and MA would remain on the device since the earlier time. To remedy this, the MD and MA would need to be deleted manually through yangcli-pro.

View File

@ -83,16 +83,21 @@ public class Ea1000DeviceDescription extends AbstractHandlerBehaviour implements
IetfSystem system = ietfSystemService.getIetfSystemInit(session);
if (system != null && system.systemState() != null) {
swVersion = system.systemState().platform().osRelease();
AugmentedSysPlatform augmentedSysPlatform =
AugmentedSysPlatform augmentedSysStatePlatform =
(AugmentedSysPlatform) system.systemState()
.platform().augmentation(DefaultAugmentedSysPlatform.class);
serialNumber = augmentedSysPlatform.deviceIdentification().serialNumber();
if (augmentedSysStatePlatform != null && augmentedSysStatePlatform.deviceIdentification() != null) {
serialNumber = augmentedSysStatePlatform.deviceIdentification().serialNumber();
} else {
log.warn("Serial Number of device not available: {}", handler().data().deviceId());
}
DateAndTime deviceDateAndTime = system.systemState().clock().currentDatetime();
OffsetDateTime odt =
OffsetDateTime.parse(deviceDateAndTime.string(), DateTimeFormatter.ISO_OFFSET_DATE_TIME);
if (odt.getYear() < OffsetDateTime.now(ZoneId.of("UTC")).getYear()) {
OffsetDateTime nowUtc = OffsetDateTime.now(ZoneId.of("UTC"));
log.warn("Date on device is in the past: {}. Setting it to {}", odt.toString(), nowUtc);
log.warn("Date on device {} is in the past: {}. Setting it to {}",
handler().data().deviceId(), odt.toString(), nowUtc);
ietfSystemService.setCurrentDatetime(nowUtc, session);
}
}

View File

@ -20,14 +20,8 @@ import java.time.OffsetDateTime;
import org.onosproject.netconf.DatastoreId;
import org.onosproject.netconf.NetconfException;
import org.onosproject.netconf.NetconfSession;
import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.doupgradeandreboot.DoUpgradeAndRebootInput;
import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.doupgradeandreboot.DoUpgradeAndRebootOutput;
import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.pullupdatetarfromtftp.PullUpdateTarFromTftpInput;
import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.readfromsyslog.ReadFromSyslogInput;
import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.readfromsyslog.ReadFromSyslogOutput;
import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystem;
import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystemOpParam;
import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.ietfsystem.systemrestart.SystemRestartInput;
/**
* Extension of ietfSystemService to include NETCONF sessions.
@ -75,15 +69,6 @@ public interface IetfSystemNetconfService {
*/
void setCurrentDatetime(OffsetDateTime date, NetconfSession session) throws NetconfException;
/**
* Service interface of systemRestart.
*
* @param inputVar input of service interface systemRestart
* @param session An active NETCONF session
* @throws NetconfException if the session has any error
*/
void systemRestart(SystemRestartInput inputVar, NetconfSession session) throws NetconfException;
/**
* Service interface of systemShutdown.
*
@ -92,36 +77,4 @@ public interface IetfSystemNetconfService {
*/
void systemShutdown(NetconfSession session) throws NetconfException;
/**
* Service interface of doUpgradeAndReboot.
*
* @param inputVar input of service interface doUpgradeAndReboot
* @param session An active NETCONF session
* @return doUpgradeAndRebootOutput output of service interface doUpgradeAndReboot
* @throws NetconfException if the session has any error
*/
DoUpgradeAndRebootOutput doUpgradeAndReboot(DoUpgradeAndRebootInput inputVar, NetconfSession session)
throws NetconfException;
/**
* Service interface of pullUpdateTarFromTftp.
*
* @param inputVar input of service interface pullUpdateTarFromTftp
* @param session An active NETCONF session
* @throws NetconfException if the session has any error
*/
void pullUpdateTarFromTftp(PullUpdateTarFromTftpInput inputVar, NetconfSession session)
throws NetconfException;
/**
* Service interface of readFromSyslog.
*
* @param inputVar input of service interface readFromSyslog
* @param session An active NETCONF session
* @return readFromSyslogOutput output of service interface readFromSyslog
* @throws NetconfException if the session has any error
*/
ReadFromSyslogOutput readFromSyslog(ReadFromSyslogInput inputVar, NetconfSession session)
throws NetconfException;
}

View File

@ -1,135 +0,0 @@
/*
* Copyright 2017-present Open Networking Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.drivers.microsemi.yang;
import com.google.common.collect.ImmutableMap;
import org.apache.felix.scr.annotations.Component;
import org.onosproject.yang.AbstractYangModelRegistrator;
import org.onosproject.yang.gen.v1.entitystatetcmib.rev20051122.EntityStateTcMib;
import org.onosproject.yang.gen.v1.fpgainternal.rev20151130.FpgaInternal;
import org.onosproject.yang.gen.v1.ianacrypthash.rev20140806.IanaCryptHash;
import org.onosproject.yang.gen.v1.ianaiftype.rev20140508.IanaIfType;
import org.onosproject.yang.gen.v1.ieeetypes.rev20080522.IeeeTypes;
import org.onosproject.yang.gen.v1.ietfinettypes.rev20130715.IetfInetTypes;
import org.onosproject.yang.gen.v1.ietfinterfaces.rev20140508.IetfInterfaces;
import org.onosproject.yang.gen.v1.ietfnetconf.rev20110601.IetfNetconf;
import org.onosproject.yang.gen.v1.ietfnetconfacm.rev20120222.IetfNetconfAcm;
import org.onosproject.yang.gen.v1.ietfnetconfmonitoring.rev20101004.IetfNetconfMonitoring;
import org.onosproject.yang.gen.v1.ietfnetconfnotifications.rev20120206.IetfNetconfNotifications;
import org.onosproject.yang.gen.v1.ietfnetconfwithdefaults.rev20100609.IetfNetconfWithDefaults;
import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystem;
import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.IetfSystemMicrosemi;
import org.onosproject.yang.gen.v1.ietfsystemtlsauth.rev20140524.IetfSystemTlsAuth;
import org.onosproject.yang.gen.v1.ietfx509certtoname.rev20130326.IetfX509CertToName;
import org.onosproject.yang.gen.v1.ietfyangtypes.rev20130715.IetfYangTypes;
import org.onosproject.yang.gen.v1.mseacfm.rev20160229.MseaCfm;
import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.MseaSaFiltering;
import org.onosproject.yang.gen.v1.mseasoamfm.rev20160229.MseaSoamFm;
import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.MseaSoamPm;
import org.onosproject.yang.gen.v1.mseatypes.rev20160229.MseaTypes;
import org.onosproject.yang.gen.v1.mseaunievcinterface.rev20160317.MseaUniEvcInterface;
import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.MseaUniEvcService;
import org.onosproject.yang.gen.v1.ncnotifications.rev20080714.NcNotifications;
import org.onosproject.yang.gen.v1.netopeercfgnetopeer.rev20130214.NetopeerCfgnetopeer;
import org.onosproject.yang.gen.v1.notifications.rev20080714.Notifications;
import org.onosproject.yang.gen.v1.rfc2544.rev20151020.Rfc2544;
import org.onosproject.yang.gen.v1.svcactivationtypes.rev20151027.SvcActivationTypes;
import org.onosproject.yang.gen.v1.y1564.rev20151029.Y1564;
import org.onosproject.yang.model.DefaultYangModuleId;
import org.onosproject.yang.model.YangModuleId;
import org.onosproject.yang.runtime.AppModuleInfo;
import org.onosproject.yang.runtime.DefaultAppModuleInfo;
import java.util.HashMap;
import java.util.Map;
/**
* Representation of Microsemi model registrator which registers Microsemi device
* models.
*/
@Component(immediate = true)
public class MicrosemiModelRegistrator extends AbstractYangModelRegistrator {
public MicrosemiModelRegistrator() {
super(IetfSystem.class, getAppInfo());
}
private static Map<YangModuleId, AppModuleInfo> getAppInfo() {
Map<YangModuleId, AppModuleInfo> appInfo = new HashMap<>();
appInfo.put(new DefaultYangModuleId("fpga-internal", "2015-11-30"),
new DefaultAppModuleInfo(FpgaInternal.class, null));
appInfo.put(new DefaultYangModuleId("iana-if-type", "2014-05-08"),
new DefaultAppModuleInfo(IanaIfType.class, null));
appInfo.put(new DefaultYangModuleId("ietf-yang-types", "2013-07-15"),
new DefaultAppModuleInfo(IetfYangTypes.class, null));
appInfo.put(new DefaultYangModuleId("msea-sa-filtering", "2016-04-12"),
new DefaultAppModuleInfo(MseaSaFiltering.class, null));
appInfo.put(new DefaultYangModuleId("ietf-x509-cert-to-name", "2013-03-26"),
new DefaultAppModuleInfo(IetfX509CertToName.class, null));
appInfo.put(new DefaultYangModuleId("ietf-system", "2014-08-06"),
new DefaultAppModuleInfo(IetfSystem.class, null));
appInfo.put(new DefaultYangModuleId("msea-types", "2016-02-29"),
new DefaultAppModuleInfo(MseaTypes.class, null));
appInfo.put(new DefaultYangModuleId("ietf-inet-types", "2013-07-15"),
new DefaultAppModuleInfo(IetfInetTypes.class, null));
appInfo.put(new DefaultYangModuleId("ietf-netconf-with-defaults", "2010-06-09"),
new DefaultAppModuleInfo(IetfNetconfWithDefaults.class, null));
appInfo.put(new DefaultYangModuleId("msea-uni-evc-service", "2016-03-17"),
new DefaultAppModuleInfo(MseaUniEvcService.class, null));
appInfo.put(new DefaultYangModuleId("ietf-netconf-monitoring", "2010-10-04"),
new DefaultAppModuleInfo(IetfNetconfMonitoring.class, null));
appInfo.put(new DefaultYangModuleId("ietf-netconf-acm", "2012-02-22"),
new DefaultAppModuleInfo(IetfNetconfAcm.class, null));
appInfo.put(new DefaultYangModuleId("ietf-system-tls-auth", "2014-05-24"),
new DefaultAppModuleInfo(IetfSystemTlsAuth.class, null));
appInfo.put(new DefaultYangModuleId("rfc-2544", "2015-10-20"),
new DefaultAppModuleInfo(Rfc2544.class, null));
appInfo.put(new DefaultYangModuleId("msea-cfm", "2016-02-29"),
new DefaultAppModuleInfo(MseaCfm.class, null));
appInfo.put(new DefaultYangModuleId("netopeer-cfgnetopeer", "2013-02-14"),
new DefaultAppModuleInfo(NetopeerCfgnetopeer.class, null));
appInfo.put(new DefaultYangModuleId("ENTITY-STATE-TC-MIB", "2005-11-22"),
new DefaultAppModuleInfo(EntityStateTcMib.class, null));
appInfo.put(new DefaultYangModuleId("msea-soam-fm", "2016-02-29"),
new DefaultAppModuleInfo(MseaSoamFm.class, null));
appInfo.put(new DefaultYangModuleId("ietf-netconf-notifications", "2012-02-06"),
new DefaultAppModuleInfo(IetfNetconfNotifications.class, null));
appInfo.put(new DefaultYangModuleId("nc-notifications", "2008-07-14"),
new DefaultAppModuleInfo(NcNotifications.class, null));
appInfo.put(new DefaultYangModuleId("iana-crypt-hash", "2014-08-06"),
new DefaultAppModuleInfo(IanaCryptHash.class, null));
appInfo.put(new DefaultYangModuleId("msea-uni-evc-interface", "2016-03-17"),
new DefaultAppModuleInfo(MseaUniEvcInterface.class, null));
appInfo.put(new DefaultYangModuleId("msea-soam-pm", "2016-02-29"),
new DefaultAppModuleInfo(MseaSoamPm.class, null));
appInfo.put(new DefaultYangModuleId("ieee-types", "2008-05-22"),
new DefaultAppModuleInfo(IeeeTypes.class, null));
appInfo.put(new DefaultYangModuleId("svc-activation-types", "2015-10-27"),
new DefaultAppModuleInfo(SvcActivationTypes.class, null));
appInfo.put(new DefaultYangModuleId("ietf-netconf", "2011-06-01"),
new DefaultAppModuleInfo(IetfNetconf.class, null));
appInfo.put(new DefaultYangModuleId("ietf-system-microsemi", "2016-05-05"),
new DefaultAppModuleInfo(IetfSystemMicrosemi.class, null));
appInfo.put(new DefaultYangModuleId("notifications", "2008-07-14"),
new DefaultAppModuleInfo(Notifications.class, null));
appInfo.put(new DefaultYangModuleId("y-1564", "2015-10-29"),
new DefaultAppModuleInfo(Y1564.class, null));
appInfo.put(new DefaultYangModuleId("ietf-interfaces", "2014-05-08"),
new DefaultAppModuleInfo(IetfInterfaces.class, null));
return ImmutableMap.copyOf(appInfo);
}
}

View File

@ -76,15 +76,12 @@ public abstract class AbstractYangServiceImpl {
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected YangModelRegistry yangModelRegistry;
// @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
// protected SchemaContextProvider schemaContextProvider;
protected ApplicationId appId;
// xSer is not a service and is a class variable. Can be lost on deactivate.
// Must be recreated on activate
protected XmlSerializer xSer;
protected YangSerializerContext yCtx;
protected XmlSerializer xSer = null;
protected YangSerializerContext yCtx = null;
protected static final Pattern REGEX_XML_HEADER =
Pattern.compile("(<\\?xml).*(\\?>)", Pattern.DOTALL);
@ -107,11 +104,8 @@ public abstract class AbstractYangServiceImpl {
@Activate
public void activate() {
Set<YangSerializer> yangSer = ((YangSerializerRegistry) yangModelRegistry).getSerializers();
yangSer.forEach(ser -> {
if (ser instanceof XmlSerializer) {
xSer = (XmlSerializer) ser;
}
});
xSer = (XmlSerializer) yangSer.stream()
.filter(ser -> (ser instanceof XmlSerializer)).findFirst().get();
SchemaContext context = ((SchemaContextProvider) yangModelRegistry)
.getSchemaContext(ResourceId.builder().addBranchPointSchema("/", null).build());

View File

@ -29,14 +29,8 @@ import org.onosproject.netconf.NetconfException;
import org.onosproject.netconf.NetconfSession;
import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.ietfsystem.DefaultSystem;
import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.ietfsystem.DefaultSystemState;
import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.doupgradeandreboot.DoUpgradeAndRebootInput;
import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.doupgradeandreboot.DoUpgradeAndRebootOutput;
import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.pullupdatetarfromtftp.PullUpdateTarFromTftpInput;
import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.readfromsyslog.ReadFromSyslogInput;
import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.readfromsyslog.ReadFromSyslogOutput;
import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystem;
import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystemOpParam;
import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.ietfsystem.systemrestart.SystemRestartInput;
import org.onosproject.yang.model.DefaultModelObjectData;
import org.onosproject.yang.model.ModelConverter;
import org.onosproject.yang.model.ModelObject;
@ -145,35 +139,11 @@ public class IetfSystemManager extends AbstractYangServiceImpl
log.info("Result from NETCONF RPC <set-current-datetime>: {}", xmlResult);
}
@Override
public void systemRestart(SystemRestartInput inputVar, NetconfSession session) {
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void systemShutdown(NetconfSession session) {
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public DoUpgradeAndRebootOutput doUpgradeAndReboot(DoUpgradeAndRebootInput inputVar, NetconfSession session)
throws NetconfException {
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void pullUpdateTarFromTftp(PullUpdateTarFromTftpInput inputVar, NetconfSession session)
throws NetconfException {
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public ReadFromSyslogOutput readFromSyslog(ReadFromSyslogInput inputVar, NetconfSession session)
throws NetconfException {
throw new UnsupportedOperationException("Not yet implemented");
}
/**
* Builds a request crafted to get the configuration required to create
* details descriptions for the device.
@ -186,9 +156,10 @@ public class IetfSystemManager extends AbstractYangServiceImpl
rpc.append("xmlns:sysms=\"http://www.microsemi.com/microsemi-edge-assure/msea-system\">");
rpc.append("<platform>");
rpc.append("<os-release/>");
rpc.append("<sysms:device-identification>");
rpc.append("<sysms:serial-number/>");
rpc.append("</sysms:device-identification>");
//FIXME: This has been commented out until the augment of common models issue with onos-yang-tools is sorted
// rpc.append("<sysms:device-identification>");
// rpc.append("<sysms:serial-number/>");
// rpc.append("</sysms:device-identification>");
rpc.append("</platform>");
rpc.append("<clock>");
rpc.append("<current-datetime/>");

View File

@ -35,7 +35,6 @@ import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.DefaultMefCfm;
import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.abortloopback.AbortLoopbackInput;
import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.MaintenanceDomain;
import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.MaintenanceAssociation;
import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.CcmIntervalEnum;
import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.MaintenanceAssociationEndPoint;
import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitlinktrace.TransmitLinktraceInput;
import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitlinktrace.TransmitLinktraceOutput;
@ -43,7 +42,6 @@ import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitloopback.
import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.AugmentedMseaCfmMaintenanceAssociationEndPoint;
import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint;
import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.augmentedmseacfmmaintenanceassociationendpoint.delaymeasurements.DelayMeasurement;
import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.augmentedmseacfmmaintenanceassociationendpoint.lossmeasurements.lossmeasurement.MessagePeriodEnum;
import org.onosproject.yang.model.DefaultModelObjectData;
import org.onosproject.yang.model.ModelConverter;
import org.onosproject.yang.model.ModelObject;
@ -56,6 +54,7 @@ import org.onosproject.yang.runtime.DefaultAnnotation;
import org.onosproject.yang.runtime.DefaultCompositeStream;
import java.io.ByteArrayInputStream;
import java.util.regex.Pattern;
/**
* Implementation of the MseaCfmServiceNetconf YANG model service.
@ -69,6 +68,16 @@ public class MseaCfmManager extends AbstractYangServiceImpl
public static final String MSEA_CFM_NS = "http://www.microsemi.com/microsemi-edge-assure/msea-cfm";
public static final String MSEA_CFM_PM_NS = "http://www.microsemi.com/microsemi-edge-assure/msea-soam-pm";
//FIXME Remove when the issue with Null bits on onos-yang-tools is sorted
@Deprecated
protected static final Pattern REGEX_EMPTY_ACTIVE_DEFECTS =
Pattern.compile("(<active-defects)[ ]?(/>)", Pattern.DOTALL);
//FIXME Remove when the issue with Null bits on onos-yang-tools is sorted
@Deprecated
protected static final Pattern REGEX_EMPTY_LAST_DEFECT_SENT =
Pattern.compile("(<msea-soam-fm:last-defect-sent)[ ]?(/>)", Pattern.DOTALL);
@Activate
public void activate() {
super.activate();
@ -96,7 +105,6 @@ public class MseaCfmManager extends AbstractYangServiceImpl
String xmlResult = session.get(xmlQueryStr, null);
xmlResult = removeRpcReplyData(xmlResult);
xmlResult = removePrefixedMessagePeriod(xmlResult);
DefaultCompositeStream resultDcs = new DefaultCompositeStream(
null, new ByteArrayInputStream(xmlResult.getBytes()));
CompositeData compositeData = xSer.decode(resultDcs, yCtx);
@ -127,7 +135,7 @@ public class MseaCfmManager extends AbstractYangServiceImpl
String xmlResult = session.get(xmlQueryStr, null);
xmlResult = removeRpcReplyData(xmlResult);
xmlResult = removePrefixedCcmInterval(xmlResult);
xmlResult = removeEmptyActiveDefects(xmlResult);
DefaultCompositeStream resultDcs = new DefaultCompositeStream(
null, new ByteArrayInputStream(xmlResult.getBytes()));
CompositeData compositeData = xSer.decode(resultDcs, yCtx);
@ -155,7 +163,6 @@ public class MseaCfmManager extends AbstractYangServiceImpl
String xmlResult = session.get(xmlQueryStr, null);
xmlResult = removeRpcReplyData(xmlResult);
xmlResult = removePrefixedMessagePeriod(xmlResult);
DefaultCompositeStream resultDcs = new DefaultCompositeStream(
null, new ByteArrayInputStream(xmlResult.getBytes()));
CompositeData compositeData = xSer.decode(resultDcs, yCtx);
@ -287,6 +294,16 @@ public class MseaCfmManager extends AbstractYangServiceImpl
throw new UnsupportedOperationException("Not yet implemented");
}
//FIXME Remove when the fix for null bits with onos-yang-tools
// https://gerrit.onosproject.org/#/c/15777/ is available
@Deprecated
private static String removeEmptyActiveDefects(String rpcReplyXml) throws NetconfException {
rpcReplyXml = REGEX_EMPTY_ACTIVE_DEFECTS.matcher(rpcReplyXml).replaceFirst("");
rpcReplyXml = REGEX_EMPTY_LAST_DEFECT_SENT.matcher(rpcReplyXml).replaceFirst("");
return rpcReplyXml;
}
@Deprecated //Replace this with a ModelObject defintion
private String buildMepEssentialsQueryString(MdId mdId, MaIdShort maId,
MepId mepId) {
@ -435,29 +452,4 @@ public class MseaCfmManager extends AbstractYangServiceImpl
return rpc.toString();
}
private static final String removePrefixedMessagePeriod(String xmlResult) {
xmlResult = xmlResult.replace("message-period>3ms</",
"message-period>" + MessagePeriodEnum.YANGAUTOPREFIX3MS.toString() + "</");
xmlResult = xmlResult.replace("message-period>10ms</",
"message-period>" + MessagePeriodEnum.YANGAUTOPREFIX10MS.toString() + "</");
xmlResult = xmlResult.replace("message-period>100ms</",
"message-period>" + MessagePeriodEnum.YANGAUTOPREFIX100MS.toString() + "</");
xmlResult = xmlResult.replace("message-period>1000ms</",
"message-period>" + MessagePeriodEnum.YANGAUTOPREFIX1000MS.toString() + "</");
return xmlResult;
}
private static final String removePrefixedCcmInterval(String xmlResult) {
xmlResult = xmlResult.replace("ccm-interval>3.3ms</",
"ccm-interval>" + CcmIntervalEnum.YANGAUTOPREFIX3_3MS.toString() + "</");
xmlResult = xmlResult.replace("ccm-interval>10ms</",
"ccm-interval>" + CcmIntervalEnum.YANGAUTOPREFIX10MS.toString() + "</");
xmlResult = xmlResult.replace("ccm-interval>100ms</",
"ccm-interval>" + CcmIntervalEnum.YANGAUTOPREFIX100MS.toString() + "</");
xmlResult = xmlResult.replace("ccm-interval>1s</",
"ccm-interval>" + CcmIntervalEnum.YANGAUTOPREFIX1S.toString() + "</");
return xmlResult;
}
}

View File

@ -41,14 +41,17 @@ import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException
import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.MdNameAndTypeCombo;
import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.MaNameAndTypeCombo;
import java.util.BitSet;
/**
* Test of the CFM implementation on EA1000 through the incubator/net/l2monitoring interface.
*/
public class EA1000CfmMepProgrammableTest {
EA1000CfmMepProgrammable cfmProgrammable;
MdId mdId1 = MdIdCharStr.asMdId("md-1");
MaIdShort maId11 = MaIdCharStr.asMaId("ma-1-1");
MepId mep111 = MepId.valueOf((short) 1);
public static final MdId MD_ID_1 = MdIdCharStr.asMdId("md-1");
public static final MaIdShort MA_ID_11 = MaIdCharStr.asMaId("ma-1-1");
public static final MepId MEP_111 = MepId.valueOf((short) 1);
public static final MepId MEP_112 = MepId.valueOf((short) 2);
@Before
public void setUp() throws Exception {
@ -72,7 +75,7 @@ public class EA1000CfmMepProgrammableTest {
@Test
public void testGetMep() throws CfmConfigException {
MepEntry mepEntry = cfmProgrammable.getMep(mdId1, maId11, mep111);
MepEntry mepEntry = cfmProgrammable.getMep(MD_ID_1, MA_ID_11, MEP_111);
//Result will come from MockNetconfSessionEa1000.SAMPLE_MSEACFM_MD_MA_MEP_FULL_REPLY
assertNotNull(mepEntry);
@ -80,13 +83,43 @@ public class EA1000CfmMepProgrammableTest {
assertTrue(mepEntry.cciEnabled());
assertEquals(Priority.PRIO5.name(), mepEntry.ccmLtmPriority().name());
assertTrue(mepEntry.activeMacStatusDefect()); //remote-mac-error
assertTrue(mepEntry.activeRdiCcmDefect()); //remote-rdi
assertTrue("Expecting remote-mac-error", mepEntry.activeMacStatusDefect()); //remote-mac-error
assertTrue("Expecting remote-rdi", mepEntry.activeRdiCcmDefect()); //remote-rdi
assertNotNull(mepEntry.activeRemoteMepList());
//TODO Comment back in this test - this is a serious issue with onos-yang-tools that only 1 is found
// See https://gerrit.onosproject.org/#/c/15164/
//FIXME Waiting on patch https://gerrit.onosproject.org/#/c/15778/
// assertEquals("Expecting 2 Remote Meps", 2, mepEntry.activeRemoteMepList().size());
mepEntry.activeRemoteMepList().forEach(rmep -> {
if (rmep.remoteMepId().value() == 1) {
assertEquals(RemoteMepState.RMEP_FAILED.name(),
rmep.state().toString());
assertEquals(54654654L, rmep.failedOrOkTime().toMillis());
assertEquals("aa:bb:cc:dd:ee:ff".toUpperCase(), rmep.macAddress().toString());
assertFalse(rmep.rdi());
assertEquals(PortStatusTlvType.PS_NO_STATUS_TLV.name(),
rmep.portStatusTlvType().toString());
assertEquals(InterfaceStatusTlvType.IS_DORMANT.name(),
rmep.interfaceStatusTlvType().toString());
}
});
}
@Test
public void testGetMep2() throws CfmConfigException {
MepEntry mepEntry = cfmProgrammable.getMep(MD_ID_1, MA_ID_11, MEP_112);
//Result will come from MockNetconfSessionEa1000.SAMPLE_MSEACFM_MD_MA_MEP_FULL_REPLY
assertNotNull(mepEntry);
assertTrue(mepEntry.administrativeState());
assertTrue(mepEntry.cciEnabled());
assertEquals(Priority.PRIO4.name(), mepEntry.ccmLtmPriority().name());
assertNotNull(mepEntry.activeRemoteMepList());
BitSet bs1 = new BitSet();
bs1.clear();
//FIXME Waiting on patch https://gerrit.onosproject.org/#/c/15778/
// assertEquals("Expecting 2 Remote Meps", 2, mepEntry.activeRemoteMepList().size());
mepEntry.activeRemoteMepList().forEach(rmep -> {
if (rmep.remoteMepId().value() == 1) {
@ -110,7 +143,7 @@ public class EA1000CfmMepProgrammableTest {
*/
@Test
public void testDeleteMep() throws CfmConfigException {
assertTrue(cfmProgrammable.deleteMep(mdId1, maId11, mep111));
assertTrue(cfmProgrammable.deleteMep(MD_ID_1, MA_ID_11, MEP_111));
}
/**
@ -126,12 +159,12 @@ public class EA1000CfmMepProgrammableTest {
lbCreate.vlanPriority(Priority.PRIO3);
lbCreate.vlanDropEligible(true);
cfmProgrammable.transmitLoopback(mdId1, maId11, mep111, lbCreate.build());
cfmProgrammable.transmitLoopback(MD_ID_1, MA_ID_11, MEP_111, lbCreate.build());
}
@Test
public void testAbortLoopback() throws CfmConfigException {
cfmProgrammable.abortLoopback(mdId1, maId11, mep111);
cfmProgrammable.abortLoopback(MD_ID_1, MA_ID_11, MEP_111);
}
// @Test

View File

@ -96,7 +96,7 @@ public class IetfSystemManagerTest {
AugmentedSysPlatform sysSystemState =
(AugmentedSysPlatform) sys.systemState().platform().augmentation(DefaultAugmentedSysPlatform.class);
assertEquals("Eagle Simulator.", sysSystemState.deviceIdentification().serialNumber());
assertEquals("EA1000 unit test.", sysSystemState.deviceIdentification().serialNumber());
}
@Test

View File

@ -19,6 +19,7 @@ import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Pattern;
import org.onosproject.drivers.microsemi.EA1000CfmMepProgrammableTest;
import org.onosproject.netconf.DatastoreId;
import org.onosproject.netconf.NetconfDeviceInfo;
import org.onosproject.netconf.NetconfDeviceOutputEventListener;
@ -375,43 +376,59 @@ public class MockNetconfSessionEa1000 extends NetconfSessionAdapter {
+ "(</rpc>)\\R?"
+ "(]]>){2}", Pattern.DOTALL);
//For testGetConfigMseaCfmEssentials
//For testGetMep
private String sampleXmlRegexGetMseaCfmFullStr =
"(<\\?xml).*(<rpc).*(<get>)\\R?"
+ "(<filter type=\"subtree\">)\\R?"
+ "(<mef-cfm).*"
+ "(<maintenance-domain>)\\R?"
+ "(<id/>)\\R?"
+ "(<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>)\\R?"
+ "(<md-level/>)?\\R?"
+ "(<maintenance-association>)\\R?"
+ "(<id/>)\\R?"
+ "(<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>)\\R?"
+ "(<maintenance-association-end-point>)\\R?"
+ "(<mep-identifier>)[0-9]{1,4}(</mep-identifier>)\\R?"
+ "(<interface/>)?\\R?"
+ "(<primary-vid/>)?\\R?"
+ "(<administrative-state/>)?\\R?"
+ "(<mac-address/>)?\\R?"
+ "(<ccm-ltm-priority/>)?\\R?"
+ "(<continuity-check/>)?\\R?"
+ "(<loopback/>)?\\R?"
+ "(<linktrace/>)?\\R?"
+ "(<remote-mep-database/>)\\R?"
+ "(<msea-soam-fm:operational-state/>)\\R?"
+ "(<msea-soam-fm:connectivity-status/>)\\R?"
+ "(<msea-soam-fm:port-status/>)\\R?"
+ "(<msea-soam-fm:interface-status/>)\\R?"
+ "(<msea-soam-fm:last-defect-sent/>)\\R?"
+ "(<msea-soam-fm:rdi-transmit-status/>)\\R?"
+ "(</maintenance-association-end-point>)\\R?"
+ "(</maintenance-association>)\\R?"
+ "(</maintenance-domain>)\\R?"
+ "(</mef-cfm>)\\R?"
+ "(</filter>)\\R?"
+ "(</get>)\\R?"
+ "(</rpc>)\\R?"
+ "(]]>){2}";
private Pattern sampleXmlRegexGetMseaCfmFull =
Pattern.compile("(<\\?xml).*(<rpc).*(<get>)\\R?"
+ "(<filter type=\"subtree\">)\\R?"
+ "(<mef-cfm).*"
+ "(<maintenance-domain>)\\R?"
+ "(<id/>)\\R?"
+ "(<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>)\\R?"
+ "(<md-level/>)?\\R?"
+ "(<maintenance-association>)\\R?"
+ "(<id/>)\\R?"
+ "(<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>)\\R?"
+ "(<maintenance-association-end-point>)\\R?"
+ "(<mep-identifier>)[0-9]{1,4}(</mep-identifier>)\\R?"
+ "(<interface/>)?\\R?"
+ "(<primary-vid/>)?\\R?"
+ "(<administrative-state/>)?\\R?"
+ "(<mac-address/>)?\\R?"
+ "(<ccm-ltm-priority/>)?\\R?"
+ "(<continuity-check/>)?\\R?"
+ "(<loopback/>)?\\R?"
+ "(<linktrace/>)?\\R?"
+ "(<remote-mep-database/>)\\R?"
+ "(<msea-soam-fm:operational-state/>)\\R?"
+ "(<msea-soam-fm:connectivity-status/>)\\R?"
+ "(<msea-soam-fm:port-status/>)\\R?"
+ "(<msea-soam-fm:interface-status/>)\\R?"
+ "(<msea-soam-fm:last-defect-sent/>)\\R?"
+ "(<msea-soam-fm:rdi-transmit-status/>)\\R?"
+ "(</maintenance-association-end-point>)\\R?"
+ "(</maintenance-association>)\\R?"
+ "(</maintenance-domain>)\\R?"
+ "(</mef-cfm>)\\R?"
+ "(</filter>)\\R?"
+ "(</get>)\\R?"
+ "(</rpc>)\\R?"
+ "(]]>){2}", Pattern.DOTALL);
Pattern.compile(sampleXmlRegexGetMseaCfmFullStr
.replace("(<mep-identifier>)[0-9]{1,4}(</mep-identifier>)",
"(<mep-identifier>)" +
EA1000CfmMepProgrammableTest.MEP_111 +
"(</mep-identifier>)"),
Pattern.DOTALL);
private Pattern sampleXmlRegexGetMseaCfmFull2 =
Pattern.compile(sampleXmlRegexGetMseaCfmFullStr
.replace("(<mep-identifier>)[0-9]{1,4}(</mep-identifier>)",
"(<mep-identifier>)" +
EA1000CfmMepProgrammableTest.MEP_112 +
"(</mep-identifier>)"),
Pattern.DOTALL);
//For testGetConfigMseaCfmEssentials
private Pattern sampleXmlRegexGetMseaDelay =
@ -555,7 +572,7 @@ public class MockNetconfSessionEa1000 extends NetconfSessionAdapter {
+ "<platform>\n"
+ "<os-release>4.4.0-53-generic</os-release>\n"
+ "<sysms:device-identification>\n"
+ "<sysms:serial-number>Eagle Simulator.</sysms:serial-number>\n"
+ "<sysms:serial-number>EA1000 unit test.</sysms:serial-number>\n"
+ "</sysms:device-identification>\n"
+ "</platform>\n"
+ "</system-state>\n"
@ -830,25 +847,25 @@ public class MockNetconfSessionEa1000 extends NetconfSessionAdapter {
+ "xmlns:msea-soam-pm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-pm\">"
+ "<maintenance-domain>"
+ "<id>1</id>"
+ "<name>md-1</name>"
+ "<name>" + EA1000CfmMepProgrammableTest.MD_ID_1 + "</name>"
+ "<maintenance-association>"
+ "<id>1</id>"
+ "<name>ma-1-1</name>"
+ "<name>" + EA1000CfmMepProgrammableTest.MA_ID_11 + "</name>"
+ "<ccm-interval>3.3ms</ccm-interval>"
+ "<maintenance-association-end-point>"
+ "<mep-identifier>1</mep-identifier>"
+ "<mep-identifier>" + EA1000CfmMepProgrammableTest.MEP_111 + "</mep-identifier>"
+ "<interface>eth0</interface>"
+ "<primary-vid>20</primary-vid>"
+ "<administrative-state>true</administrative-state>"
+ "<mac-address>00:b0:ae:03:ff:31</mac-address>"
+ "<ccm-ltm-priority>5</ccm-ltm-priority>"
+ "<continuity-check>"
+ "<cci-enabled>true</cci-enabled>"
+ "<fng-state>defect-reported</fng-state>"
+ "<highest-priority-defect-found>remote-invalid-ccm</highest-priority-defect-found>"
+ "<active-defects>remote-rdi remote-invalid-ccm</active-defects>"
+ "<ccm-sequence-error-count>0</ccm-sequence-error-count>"
+ "<sent-ccms>197</sent-ccms>"
+ "<cci-enabled>true</cci-enabled>"
+ "<fng-state>defect-reported</fng-state>"
+ "<highest-priority-defect-found>remote-invalid-ccm</highest-priority-defect-found>"
+ "<active-defects>remote-rdi remote-invalid-ccm</active-defects>"
+ "<ccm-sequence-error-count>0</ccm-sequence-error-count>"
+ "<sent-ccms>197</sent-ccms>"
+ "</continuity-check>"
+ "<loopback>"
+ "</loopback>"
@ -887,6 +904,85 @@ public class MockNetconfSessionEa1000 extends NetconfSessionAdapter {
+ "</data>"
+ "</rpc-reply>";
/**
* With an empty <last-defect-sent />. Retrieved from simulator.
*/
private static final String SAMPLE_MSEACFM_MD_MA_MEP_FULL_REPLY2 =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ "<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"47\">"
+ "<data>"
+ "<mef-cfm xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-cfm\" "
+ "xmlns:msea-soam-fm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-fm\" "
+ "xmlns:msea-soam-pm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-pm\">"
+ "<maintenance-domain>"
+ "<id>1</id>"
+ "<name>" + EA1000CfmMepProgrammableTest.MD_ID_1 + "</name>"
+ "<maintenance-association>"
+ "<id>1</id>"
+ "<name>" + EA1000CfmMepProgrammableTest.MA_ID_11 + "</name>"
+ "<maintenance-association-end-point>"
+ "<mep-identifier>" + EA1000CfmMepProgrammableTest.MEP_112 + "</mep-identifier>"
+ "<interface>eth0</interface>"
+ "<administrative-state>true</administrative-state>"
+ "<ccm-ltm-priority>4</ccm-ltm-priority>"
+ "<continuity-check>"
+ "<cci-enabled>true</cci-enabled>"
+ "<fng-state>report-defect</fng-state>"
+ "<highest-priority-defect-found>remote-mac-error</highest-priority-defect-found>"
+ "<active-defects> remote-mac-error invalid-ccm</active-defects>"
+ "<last-error-ccm>U2FtcGxlIGxhc3QgZXJyb3IgY2NtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
+ "</last-error-ccm>"
+ "<ccm-sequence-error-count>10</ccm-sequence-error-count>"
+ "<sent-ccms>15</sent-ccms>"
+ "</continuity-check>"
+ "<mac-address>53:65:61:6e:20:43</mac-address>"
+ "<msea-soam-fm:port-status>no-status-tlv</msea-soam-fm:port-status>"
+ "<msea-soam-fm:interface-status>no-status-tlv</msea-soam-fm:interface-status>"
+ "<msea-soam-fm:last-defect-sent />"
+ "<msea-soam-fm:rdi-transmit-status>false</msea-soam-fm:rdi-transmit-status>"
+ "<loopback>"
+ "<replies-received>123</replies-received>"
+ "<replies-transmitted>456</replies-transmitted>"
+ "</loopback>"
+ "<remote-mep-database>"
+ "<remote-mep>"
+ "<remote-mep-id>20</remote-mep-id>"
+ "<remote-mep-state>ok</remote-mep-state>"
+ "<failed-ok-time>150859498</failed-ok-time>"
+ "<mac-address>53:65:61:6e:20:43</mac-address>"
+ "<rdi>true</rdi>"
+ "<port-status-tlv>up</port-status-tlv>"
+ "<interface-status-tlv>no-status-tlv</interface-status-tlv>"
+ "</remote-mep>"
+ "<remote-mep>"
+ "<remote-mep-id>30</remote-mep-id>"
+ "<remote-mep-state>ok</remote-mep-state>"
+ "<failed-ok-time>150859498</failed-ok-time>"
+ "<mac-address>53:65:61:6e:20:43</mac-address>"
+ "<rdi>true</rdi>"
+ "<port-status-tlv>no-status-tlv</port-status-tlv>"
+ "<interface-status-tlv>down</interface-status-tlv>"
+ "</remote-mep>"
+ "</remote-mep-database>"
+ "<linktrace>"
+ "<unexpected-replies-received>0</unexpected-replies-received>"
+ "<msea-soam-fm:ltm-msgs-transmitted>2</msea-soam-fm:ltm-msgs-transmitted>"
+ "<msea-soam-fm:ltm-msgs-received>2</msea-soam-fm:ltm-msgs-received>"
+ "<msea-soam-fm:ltr-msgs-transmitted>2</msea-soam-fm:ltr-msgs-transmitted>"
+ "<msea-soam-fm:ltr-msgs-received>2</msea-soam-fm:ltr-msgs-received>"
+ "<linktrace-database />"
+ "</linktrace>"
+ "</maintenance-association-end-point>"
+ "</maintenance-association>"
+ "</maintenance-domain>"
+ "</mef-cfm>"
+ "</data>"
+ "</rpc-reply>";
private static final String SAMPLE_MSEACFM_DELAY_MEASUREMENT_FULL_REPLY =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ "<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"47\">"
@ -1208,6 +1304,9 @@ public class MockNetconfSessionEa1000 extends NetconfSessionAdapter {
} else if (sampleXmlRegexGetMseaCfmFull.matcher(request).matches()) {
return SAMPLE_MSEACFM_MD_MA_MEP_FULL_REPLY;
} else if (sampleXmlRegexGetMseaCfmFull2.matcher(request).matches()) {
return SAMPLE_MSEACFM_MD_MA_MEP_FULL_REPLY2;
} else if (sampleXmlRegexDeleteMseaCfmMep.matcher(request).matches()) {
return SAMPLE_REPLY_OK;

View File

@ -15,7 +15,7 @@
*/
package org.onosproject.yang;
import org.onosproject.drivers.microsemi.yang.MicrosemiModelRegistrator;
import org.onosproject.models.microsemi.MicrosemiModelRegistrator;
import org.onosproject.yang.compiler.datamodel.YangNode;
import org.onosproject.yang.compiler.tool.YangNodeInfo;
import org.onosproject.yang.runtime.DefaultModelRegistrationParam;

View File

@ -79,7 +79,7 @@ public interface MaintenanceAssociation extends NetworkResource {
/**
* Enumerated values from IEEE 802.1Q Table 21-16CCM Interval field encoding.
*/
public enum CcmInterval {
enum CcmInterval {
INVALID(0),
INTERVAL_3MS(3),
INTERVAL_10MS(10),

View File

@ -1,4 +1,16 @@
COMPILE_DEPS = [
'//lib:CORE_DEPS',
'//models/common:onos-models-common',
]
APPS = [
'org.onosproject.models.common',
]
yang_model(
app_name = 'org.onosproject.models.microsemi',
title = 'Microsemi YANG Models',
custom_registrator = True,
deps = COMPILE_DEPS,
required_apps = APPS,
)

View File

@ -41,6 +41,12 @@
<artifactId>onos-yang-model</artifactId>
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-models-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-apps-yang</artifactId>

View File

@ -0,0 +1,72 @@
/*
* Copyright 2017-present Open Networking Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.models.microsemi;
import com.google.common.collect.ImmutableMap;
import org.onosproject.yang.AbstractYangModelRegistrator;
import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystem;
import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.IetfSystemMicrosemi;
import org.apache.felix.scr.annotations.Component;
import org.onosproject.yang.gen.v1.mseacfm.rev20160229.MseaCfm;
import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.MseaSoamPm;
import org.onosproject.yang.gen.v1.mseasoamfm.rev20160229.MseaSoamFm;
import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.MseaSaFiltering;
import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.MseaUniEvcService;
import org.onosproject.yang.model.DefaultYangModuleId;
import org.onosproject.yang.model.YangModuleId;
import org.onosproject.yang.runtime.AppModuleInfo;
import org.onosproject.yang.runtime.DefaultAppModuleInfo;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
@Component(immediate = true)
public class MicrosemiModelRegistrator extends AbstractYangModelRegistrator {
public MicrosemiModelRegistrator() {
super(MicrosemiModelRegistrator.class, getAppInfo());
}
private static Map<YangModuleId, AppModuleInfo> getAppInfo() {
Map<YangModuleId, AppModuleInfo> appInfo = new HashMap<>();
List<String> sysMicrosemiFeatures = new ArrayList<>();
sysMicrosemiFeatures.add("serial-number");
appInfo.put(new DefaultYangModuleId("ietf-system-microsemi", "2016-05-05"),
new DefaultAppModuleInfo(IetfSystemMicrosemi.class, sysMicrosemiFeatures));
List<String> systemFeatures = new ArrayList<>();
systemFeatures.add("local-users");
systemFeatures.add("authentication");
systemFeatures.add("ntp");
appInfo.put(new DefaultYangModuleId("ietf-system", "2014-08-06"),
new DefaultAppModuleInfo(IetfSystem.class, systemFeatures));
appInfo.put(new DefaultYangModuleId("msea-uni-evc-service", "2016-03-17"),
new DefaultAppModuleInfo(MseaUniEvcService.class, null));
appInfo.put(new DefaultYangModuleId("msea-cfm", "2016-02-29"),
new DefaultAppModuleInfo(MseaCfm.class, null));
appInfo.put(new DefaultYangModuleId("msea-soam-fm", "2016-02-29"),
new DefaultAppModuleInfo(MseaSoamFm.class, null));
appInfo.put(new DefaultYangModuleId("msea-soam-pm", "2016-02-29"),
new DefaultAppModuleInfo(MseaSoamPm.class, null));
appInfo.put(new DefaultYangModuleId("msea-sa-filtering", "2016-04-12"),
new DefaultAppModuleInfo(MseaSaFiltering.class, null));
return ImmutableMap.copyOf(appInfo);
// TODO: Do some other registration tasks...
}
}

View File

@ -0,0 +1,19 @@
/*
* Copyright 2017-present Open Networking Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Commonly used yang models.
*/
package org.onosproject.models.microsemi;

View File

@ -1,266 +0,0 @@
module fpga-internal {
/*** NAMESPACE / PREFIX DEFINITION ***/
namespace "http://www.microsemi.com/fpga-int";
prefix "fpga-int";
/*** META INFORMATION ***/
organization
"Microsemi Inc., FTD Division";
contact
"Web URL: http://www.microsemi.com/
E-mail: info@microsemi.com
Postal: Microsemi Corporation Corporate Headquarters
One Enterprise Aliso Viejo,
CA 92656
U.S.A.
Phone: +1 949 380 6100
Fax: +1 949 215-4996";
description
"This YANG module add internal procedures to access FPAA hardware
Copyright 2015 Microsemi Inc.
All rights reserved.";
revision "2015-11-30" {
description
"Initial version - Sean Condon, Microsemi";
}
typedef sixteen-bit-hex {
type string {
pattern '0x[0-9a-fA-F]{4}';
}
description
"A 16-bit address represented as a hexadecimal number";
}
typedef thirtytwo-bit-hex {
type string {
pattern '0x[0-9a-fA-F]{8}';
}
description
"A 32-bit address represented as a hexadecimal number";
}
typedef thirtytwobit-data {
type string {
pattern '([0-9a-fA-F]{8}(:[0-9a-fA-F]{8})*)?';
}
description
"A set of 32 bit data values represented as colon separated
hex strings e.g. 'A1B2C3D4:B2C3D4F5:C3D4E5F6'";
}
typedef select-ram-enum {
type enumeration {
enum pkt-store-sel {value 0;}
enum probe-store-sel {value 1;}
enum xconn-store-sel {value 2;}
enum rmep-err-store-sel {value 3;}
enum rx-lmep-map-sel {value 4;}
enum cpu-sys-capt-fifo-sel {value 5;}
enum rmep-ram-sel {value 6;}
enum xconn-ram-sel {value 7;}
enum rmep-err-ram-sel {value 8;}
enum tx-lmep-map-sel {value 9;}
enum ext-sram-sel {value 10;}
enum car-rmac-sel {value 11;}
enum sys-mac-sel {value 12;}
enum rx-carr-data-fifo-sel {value 13;}
enum line-stats-ram-sel {value 14;}
enum cpu-sys-capt-info-fifo-sel {value 15;}
enum vlan-info-ram-sel {value 16;}
enum lbm-store-sel {value 17;}
enum lbr-ram-sel {value 18;}
enum mc-lbr-store-sel {value 19;}
enum port-mac-ram-sel {value 20;}
enum pm-db-ram-sel {value 22;}
enum tx-lb-ram-sel {value 24;}
enum tlv-ram-sel {value 25;}
enum cpu-capt-fifo-sel {value 26;}
enum cpu-capt-info-fifo-sel {value 27;}
enum policer-cfg-ram-sel {value 28;}
enum policer-ctxt-ram-sel {value 29;}
enum cpu-sys-tx-ram-sel {value 30;}
enum policer-stats-ram-sel {value 31;}
}
}
container fpga-internal {
presence "Supports FPGA direct access";
}
rpc read-registers {
description "Method to read directly from hardware registers";
input {
choice hex-or-dec {
description "Enter the starting address in either decimal (0-65535)
or hexadecimal (preceeded with 0x)";
mandatory true;
case hex {
leaf start-address-hex {
type sixteen-bit-hex;
}
}
case decimal {
leaf start-address-dec {
type uint16;
}
}
}
leaf num-locations {
type uint8 {
range 1..max;
}
description "The number of following locations (addresses) to read from";
default 1;
}
}
output {
anyxml data {
description "A set of 32 bit data values represented
as colon separated 8 character hexadecimal values";
}
}
}
rpc write-registers {
description "Method to write directly to hardware registers.
If a number of data values are given then subsequent
locations are written to";
input {
choice hex-or-dec {
description "Enter the starting address in either decimal (0-65535)
or hexadecimal (preceeded with 0x)";
case hex {
leaf start-address-hex {
type sixteen-bit-hex;
}
}
case decimal {
leaf start-address-dec {
type uint16;
}
}
}
leaf value-hex-32 {
type thirtytwobit-data;
description "A set of 32 bit data values represented
as colon separated 8 character hexadecimal values
e.g. ffffffff:ffffffff:ffffffff
The number of locations written to will be
determinted by the number of such values given";
}
}
}
rpc read-ram {
description "Method to read directly from hardware RAM";
input {
leaf ram {
type select-ram-enum;
mandatory true;
description "The type of RAM to read from";
}
choice hex-or-dec {
description "Enter the starting address in either decimal (0-65535)
or hexadecimal (preceeded with 0x)";
mandatory true;
case hex {
leaf start-address-hex {
type thirtytwo-bit-hex;
}
}
case decimal {
leaf start-address-dec {
type uint32;
}
}
}
leaf num-locations {
type uint8 {
range 1..max;
}
description "The number of following locations (addresses) to read from";
default 1;
}
}
output {
anyxml data {
description "A set of 32 bit data values represented
as colon separated 8 character hexadecimal values";
}
}
}
rpc write-ram {
description "Method to write directly to RAM registers.
If a number of data values are given then subsequent
locations are written to";
input {
leaf ram {
type select-ram-enum;
mandatory true;
description "The type of RAM to read from";
}
choice hex-or-dec {
description "Enter the starting address in either decimal (0-65535)
or hexadecimal (preceeded with 0x)";
mandatory true;
case hex {
leaf start-address-hex {
type thirtytwo-bit-hex;
}
}
case decimal {
leaf start-address-dec {
type uint32;
}
}
}
leaf value-hex-32 {
type thirtytwobit-data;
description "A set of 32 bit data values represented
as colon separated 8 character hexadecimal values
e.g. ffffffff:ffffffff:ffffffff
The number of locations written to will be
determinted by the number of such values given";
}
}
}
}

View File

@ -1,121 +0,0 @@
module iana-crypt-hash {
namespace "urn:ietf:params:xml:ns:yang:iana-crypt-hash";
prefix ianach;
organization "IANA";
contact
" Internet Assigned Numbers Authority
Postal: ICANN
12025 Waterfront Drive, Suite 300
Los Angeles, CA 90094-2536
United States
Tel: +1 310 301 5800
E-Mail: iana@iana.org>";
description
"This YANG module defines a type for storing passwords
using a hash function and features to indicate which hash
functions are supported by an implementation.
The latest revision of this YANG module can be obtained from
the IANA web site.
Requests for new values should be made to IANA via
email (iana@iana.org).
Copyright (c) 2014 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
The initial version of this YANG module is part of RFC 7317;
see the RFC itself for full legal notices.";
revision 2014-08-06 {
description
"Initial revision.";
reference
"RFC 7317: A YANG Data Model for System Management";
}
typedef crypt-hash {
type string {
pattern
'$0$.*' //Escaped all $ as Java Pattern matcher will interpret them otherwise
+ '|$1$[a-zA-Z0-9./]{1,8}$[a-zA-Z0-9./]{22}'
+ '|$5$(rounds=\d+$)?[a-zA-Z0-9./]{1,16}$[a-zA-Z0-9./]{43}'
+ '|$6$(rounds=\d+$)?[a-zA-Z0-9./]{1,16}$[a-zA-Z0-9./]{86}';
}
description
"The crypt-hash type is used to store passwords using
a hash function. The algorithms for applying the hash
function and encoding the result are implemented in
various UNIX systems as the function crypt(3).
A value of this type matches one of the forms:
$0$<clear text password>
$<id>$<salt>$<password hash>
$<id>$<parameter>$<salt>$<password hash>
The '$0$' prefix signals that the value is clear text. When
such a value is received by the server, a hash value is
calculated, and the string '$<id>$<salt>$' or
$<id>$<parameter>$<salt>$ is prepended to the result. This
value is stored in the configuration data store.
If a value starting with '$<id>$', where <id> is not '0', is
received, the server knows that the value already represents a
hashed value and stores it 'as is' in the data store.
When a server needs to verify a password given by a user, it
finds the stored password hash string for that user, extracts
the salt, and calculates the hash with the salt and given
password as input. If the calculated hash value is the same
as the stored value, the password given by the client is
accepted.
This type defines the following hash functions:
id | hash function | feature
---+---------------+-------------------
1 | MD5 | crypt-hash-md5
5 | SHA-256 | crypt-hash-sha-256
6 | SHA-512 | crypt-hash-sha-512
The server indicates support for the different hash functions
by advertising the corresponding feature.";
reference
"IEEE Std 1003.1-2008 - crypt() function
RFC 1321: The MD5 Message-Digest Algorithm
FIPS.180-4.2012: Secure Hash Standard (SHS)";
}
feature crypt-hash-md5 {
description
"Indicates that the device supports the MD5
hash function in 'crypt-hash' values.";
reference "RFC 1321: The MD5 Message-Digest Algorithm";
}
feature crypt-hash-sha-256 {
description
"Indicates that the device supports the SHA-256
hash function in 'crypt-hash' values.";
reference "FIPS.180-4.2012: Secure Hash Standard (SHS)";
}
feature crypt-hash-sha-512 {
description
"Indicates that the device supports the SHA-512
hash function in 'crypt-hash' values.";
reference "FIPS.180-4.2012: Secure Hash Standard (SHS)";
}
}

View File

@ -1,79 +0,0 @@
module ieee-types {
// XXX namespace to be allocated by IANA
namespace "urn:ietf:params:xml:ns:yang:ieee-types";
prefix "ieee";
import ietf-yang-types {
prefix yang;
}
organization
"YANG Language Design Team";
contact
"Juergen Schoenwaelder (Editor)
<j.schoenwaelder@jacobs-university.de>";
description
"This module contains standard derived YANG types
for IEEE 802 addresses and related things.";
revision 2008-05-22 {
description "Initial revision.";
}
/*
* collection of IEEE address type definitions
*/
typedef mac-address {
type yang:phys-address {
pattern '([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}';
}
description
"The mac-address type represents an 802 MAC address
represented in the `canonical' order defined by
IEEE 802.1a, i.e., as if it were transmitted least
significant bit first, even though 802.5 (in contrast
to other 802.x protocols) requires MAC addresses to
be transmitted most significant bit first.";
reference
"RFC 2579 STD 58";
}
/*
* collection of IEEE 802 related identifier types
*/
typedef bridgeid {
type string {
pattern '[0-9a-fA-F]{4}:'
+ '([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}';
}
description
"The bridgeid type represents identifers that uniquely
identify a bridge. Its first four hexadecimal digits
contain a priority value followed by a colon. The
remaining characters contain the MAC address used to
refer to a bridge in a unique fashion (typically, the
numerically smallest MAC address of all ports on the
bridge).";
reference
"RFC 4188";
}
typedef vlanid {
type uint16 {
range "1..4094";
}
description
"The vlanid type uniquely identifies a VLAN. This is
the 12-bit VLAN-ID used in the VLAN Tag header. The
range is defined by the referenced specification.";
reference
"IEEE Std 802.1Q 2003 Edition, Virtual Bridged Local
Area Networks.";
}
}

View File

@ -1,461 +0,0 @@
module ietf-inet-types {
namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
prefix "inet";
organization
"IETF NETMOD (NETCONF Data Modeling Language) Working Group";
contact
"WG Web: <http://tools.ietf.org/wg/netmod/>
WG List: <mailto:netmod@ietf.org>
WG Chair: David Kessens
<mailto:david.kessens@nsn.com>
WG Chair: Juergen Schoenwaelder
<mailto:j.schoenwaelder@jacobs-university.de>
Editor: Juergen Schoenwaelder
<mailto:j.schoenwaelder@jacobs-university.de>";
description
"This module contains a collection of generally useful derived
YANG data types for Internet addresses and related things.
Copyright (c) 2013 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC 6991; see
the RFC itself for full legal notices.";
revision 2013-07-15 {
description
"This revision adds the following new data types:
- ip-address-no-zone
- ipv4-address-no-zone
- ipv6-address-no-zone";
reference
"RFC 6991: Common YANG Data Types";
}
revision 2010-09-24 {
description
"Initial revision.";
reference
"RFC 6021: Common YANG Data Types";
}
/*** collection of types related to protocol fields ***/
typedef ip-version {
type enumeration {
enum unknown {
value "0";
description
"An unknown or unspecified version of the Internet
protocol.";
}
enum ipv4 {
value "1";
description
"The IPv4 protocol as defined in RFC 791.";
}
enum ipv6 {
value "2";
description
"The IPv6 protocol as defined in RFC 2460.";
}
}
description
"This value represents the version of the IP protocol.
In the value set and its semantics, this type is equivalent
to the InetVersion textual convention of the SMIv2.";
reference
"RFC 791: Internet Protocol
RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
RFC 4001: Textual Conventions for Internet Network Addresses";
}
typedef dscp {
type uint8 {
range "0..63";
}
description
"The dscp type represents a Differentiated Services Code Point
that may be used for marking packets in a traffic stream.
In the value set and its semantics, this type is equivalent
to the Dscp textual convention of the SMIv2.";
reference
"RFC 3289: Management Information Base for the Differentiated
Services Architecture
RFC 2474: Definition of the Differentiated Services Field
(DS Field) in the IPv4 and IPv6 Headers
RFC 2780: IANA Allocation Guidelines For Values In
the Internet Protocol and Related Headers";
}
typedef ipv6-flow-label {
type uint32 {
range "0..1048575";
}
description
"The ipv6-flow-label type represents the flow identifier or Flow
Label in an IPv6 packet header that may be used to
discriminate traffic flows.
In the value set and its semantics, this type is equivalent
to the IPv6FlowLabel textual convention of the SMIv2.";
reference
"RFC 3595: Textual Conventions for IPv6 Flow Label
RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
}
typedef port-number {
type uint16 {
range "0..65535";
}
description
"The port-number type represents a 16-bit port number of an
Internet transport-layer protocol such as UDP, TCP, DCCP, or
SCTP. Port numbers are assigned by IANA. A current list of
all assignments is available from <http://www.iana.org/>.
Note that the port number value zero is reserved by IANA. In
situations where the value zero does not make sense, it can
be excluded by subtyping the port-number type.
In the value set and its semantics, this type is equivalent
to the InetPortNumber textual convention of the SMIv2.";
reference
"RFC 768: User Datagram Protocol
RFC 793: Transmission Control Protocol
RFC 4960: Stream Control Transmission Protocol
RFC 4340: Datagram Congestion Control Protocol (DCCP)
RFC 4001: Textual Conventions for Internet Network Addresses";
}
/*** collection of types related to autonomous systems ***/
typedef as-number {
type uint32;
description
"The as-number type represents autonomous system numbers
which identify an Autonomous System (AS). An AS is a set
of routers under a single technical administration, using
an interior gateway protocol and common metrics to route
packets within the AS, and using an exterior gateway
protocol to route packets to other ASes. IANA maintains
the AS number space and has delegated large parts to the
regional registries.
Autonomous system numbers were originally limited to 16
bits. BGP extensions have enlarged the autonomous system
number space to 32 bits. This type therefore uses an uint32
base type without a range restriction in order to support
a larger autonomous system number space.
In the value set and its semantics, this type is equivalent
to the InetAutonomousSystemNumber textual convention of
the SMIv2.";
reference
"RFC 1930: Guidelines for creation, selection, and registration
of an Autonomous System (AS)
RFC 4271: A Border Gateway Protocol 4 (BGP-4)
RFC 4001: Textual Conventions for Internet Network Addresses
RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
Number Space";
}
/*** collection of types related to IP addresses and hostnames ***/
typedef ip-address {
type union {
type inet:ipv4-address;
type inet:ipv6-address;
}
description
"The ip-address type represents an IP address and is IP
version neutral. The format of the textual representation
implies the IP version. This type supports scoped addresses
by allowing zone identifiers in the address format.";
reference
"RFC 4007: IPv6 Scoped Address Architecture";
}
typedef ipv4-address {
type string {
pattern
'(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+ '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+ '(%[\p{N}\p{L}]+)?';
}
description
"The ipv4-address type represents an IPv4 address in
dotted-quad notation. The IPv4 address may include a zone
index, separated by a % sign.
The zone index is used to disambiguate identical address
values. For link-local addresses, the zone index will
typically be the interface index number or the name of an
interface. If the zone index is not present, the default
zone of the device will be used.
The canonical format for the zone index is the numerical
format";
}
typedef ipv6-address {
type string {
pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+ '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+ '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+ '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+ '(%[\p{N}\p{L}]+)?';
pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+ '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+ '(%.+)?';
}
description
"The ipv6-address type represents an IPv6 address in full,
mixed, shortened, and shortened-mixed notation. The IPv6
address may include a zone index, separated by a % sign.
The zone index is used to disambiguate identical address
values. For link-local addresses, the zone index will
typically be the interface index number or the name of an
interface. If the zone index is not present, the default
zone of the device will be used.
The canonical format of IPv6 addresses uses the textual
representation defined in Section 4 of RFC 5952. The
canonical format for the zone index is the numerical
format as described in Section 11.2 of RFC 4007.";
reference
"RFC 4291: IP Version 6 Addressing Architecture
RFC 4007: IPv6 Scoped Address Architecture
RFC 5952: A Recommendation for IPv6 Address Text
Representation";
}
typedef ip-address-no-zone {
type union {
type inet:ipv4-address-no-zone;
type inet:ipv6-address-no-zone;
}
description
"The ip-address-no-zone type represents an IP address and is
IP version neutral. The format of the textual representation
implies the IP version. This type does not support scoped
addresses since it does not allow zone identifiers in the
address format.";
reference
"RFC 4007: IPv6 Scoped Address Architecture";
}
typedef ipv4-address-no-zone {
type inet:ipv4-address {
pattern '[0-9\.]*';
}
description
"An IPv4 address without a zone index. This type, derived from
ipv4-address, may be used in situations where the zone is
known from the context and hence no zone index is needed.";
}
typedef ipv6-address-no-zone {
type inet:ipv6-address {
pattern '[0-9a-fA-F:\.]*';
}
description
"An IPv6 address without a zone index. This type, derived from
ipv6-address, may be used in situations where the zone is
known from the context and hence no zone index is needed.";
reference
"RFC 4291: IP Version 6 Addressing Architecture
RFC 4007: IPv6 Scoped Address Architecture
RFC 5952: A Recommendation for IPv6 Address Text
Representation";
}
typedef ip-prefix {
type union {
type inet:ipv4-prefix;
type inet:ipv6-prefix;
}
description
"The ip-prefix type represents an IP prefix and is IP
version neutral. The format of the textual representations
implies the IP version.";
}
typedef ipv4-prefix {
type string {
pattern
'(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+ '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+ '/(([0-9])|([1-2][0-9])|(3[0-2]))';
}
description
"The ipv4-prefix type represents an IPv4 address prefix.
The prefix length is given by the number following the
slash character and must be less than or equal to 32.
A prefix length value of n corresponds to an IP address
mask that has n contiguous 1-bits from the most
significant bit (MSB) and all other bits set to 0.
The canonical format of an IPv4 prefix has all bits of
the IPv4 address set to zero that are not part of the
IPv4 prefix.";
}
typedef ipv6-prefix {
type string {
pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+ '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+ '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+ '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+ '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+ '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+ '(/.+)';
}
description
"The ipv6-prefix type represents an IPv6 address prefix.
The prefix length is given by the number following the
slash character and must be less than or equal to 128.
A prefix length value of n corresponds to an IP address
mask that has n contiguous 1-bits from the most
significant bit (MSB) and all other bits set to 0.
The IPv6 address should have all bits that do not belong
to the prefix set to zero.
The canonical format of an IPv6 prefix has all bits of
the IPv6 address set to zero that are not part of the
IPv6 prefix. Furthermore, the IPv6 address is represented
as defined in Section 4 of RFC 5952.";
reference
"RFC 5952: A Recommendation for IPv6 Address Text
Representation";
}
/*** collection of domain name and URI types ***/
typedef domain-name {
type string {
pattern
'((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
+ '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
+ '|\.';
length "1..253";
}
description
"The domain-name type represents a DNS domain name. The
name SHOULD be fully qualified whenever possible.
Internet domain names are only loosely specified. Section
3.5 of RFC 1034 recommends a syntax (modified in Section
2.1 of RFC 1123). The pattern above is intended to allow
for current practice in domain name use, and some possible
future expansion. It is designed to hold various types of
domain names, including names used for A or AAAA records
(host names) and other records, such as SRV records. Note
that Internet host names have a stricter syntax (described
in RFC 952) than the DNS recommendations in RFCs 1034 and
1123, and that systems that want to store host names in
schema nodes using the domain-name type are recommended to
adhere to this stricter standard to ensure interoperability.
The encoding of DNS names in the DNS protocol is limited
to 255 characters. Since the encoding consists of labels
prefixed by a length bytes and there is a trailing NULL
byte, only 253 characters can appear in the textual dotted
notation.
The description clause of schema nodes using the domain-name
type MUST describe when and how these names are resolved to
IP addresses. Note that the resolution of a domain-name value
may require to query multiple DNS records (e.g., A for IPv4
and AAAA for IPv6). The order of the resolution process and
which DNS record takes precedence can either be defined
explicitly or may depend on the configuration of the
resolver.
Domain-name values use the US-ASCII encoding. Their canonical
format uses lowercase US-ASCII characters. Internationalized
domain names MUST be A-labels as per RFC 5890.";
reference
"RFC 952: DoD Internet Host Table Specification
RFC 1034: Domain Names - Concepts and Facilities
RFC 1123: Requirements for Internet Hosts -- Application
and Support
RFC 2782: A DNS RR for specifying the location of services
(DNS SRV)
RFC 5890: Internationalized Domain Names in Applications
(IDNA): Definitions and Document Framework";
}
typedef host {
type union {
type inet:ip-address;
type inet:domain-name;
}
description
"The host type represents either an IP address or a DNS
domain name.";
}
typedef uri {
type string;
description
"The uri type represents a Uniform Resource Identifier
(URI) as defined by STD 66.
Objects using the uri type MUST be in US-ASCII encoding,
and MUST be normalized as described by RFC 3986 Sections
6.2.1, 6.2.2.1, and 6.2.2.2. All unnecessary
percent-encoding is removed, and all case-insensitive
characters are set to lowercase except for hexadecimal
digits, which are normalized to uppercase as described in
Section 6.2.2.1.
The purpose of this normalization is to help provide
unique URIs. Note that this normalization is not
sufficient to provide uniqueness. Two URIs that are
textually distinct after this normalization may still be
equivalent.
Objects using the uri type may restrict the schemes that
they permit. For example, 'data:' and 'urn:' schemes
might not be appropriate.
A zero-length URI is not a valid URI. This can be used to
express 'URI absent' where required.
In the value set and its semantics, this type is equivalent
to the Uri SMIv2 textual convention defined in RFC 5017.";
reference
"RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
Group: Uniform Resource Identifiers (URIs), URLs,
and Uniform Resource Names (URNs): Clarifications
and Recommendations
RFC 5017: MIB Textual Conventions for Uniform Resource
Identifiers (URIs)";
}
}

View File

@ -1,449 +0,0 @@
module ietf-netconf-acm {
namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-acm";
prefix "nacm";
import ietf-yang-types {
prefix yang;
}
organization
"IETF NETCONF (Network Configuration) Working Group";
contact
"WG Web: <http://tools.ietf.org/wg/netconf/>
WG List: <mailto:netconf@ietf.org>
WG Chair: Mehmet Ersue
<mailto:mehmet.ersue@nsn.com>
WG Chair: Bert Wijnen
<mailto:bertietf@bwijnen.net>
Editor: Andy Bierman
<mailto:andy@yumaworks.com>
Editor: Martin Bjorklund
<mailto:mbj@tail-f.com>";
description
"NETCONF Access Control Model.
Copyright (c) 2012 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD
License set forth in Section 4.c of the IETF Trust's
Legal Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC 6536; see
the RFC itself for full legal notices.";
revision "2012-02-22" {
description
"Initial version";
reference
"RFC 6536: Network Configuration Protocol (NETCONF)
Access Control Model";
}
/*
* Extension statements
*/
extension default-deny-write {
description
"Used to indicate that the data model node
represents a sensitive security system parameter.
If present, and the NACM module is enabled (i.e.,
/nacm/enable-nacm object equals 'true'), the NETCONF server
will only allow the designated 'recovery session' to have
write access to the node. An explicit access control rule is
required for all other users.
The 'default-deny-write' extension MAY appear within a data
definition statement. It is ignored otherwise.";
}
extension default-deny-all {
description
"Used to indicate that the data model node
controls a very sensitive security system parameter.
If present, and the NACM module is enabled (i.e.,
/nacm/enable-nacm object equals 'true'), the NETCONF server
will only allow the designated 'recovery session' to have
read, write, or execute access to the node. An explicit
access control rule is required for all other users.
The 'default-deny-all' extension MAY appear within a data
definition statement, 'rpc' statement, or 'notification'
statement. It is ignored otherwise.";
}
/*
* Derived types
*/
typedef user-name-type {
type string {
length "1..max";
}
description
"General Purpose Username string.";
}
typedef matchall-string-type {
type string {
pattern "\*";
}
description
"The string containing a single asterisk '*' is used
to conceptually represent all possible values
for the particular leaf using this data type.";
}
typedef access-operations-type {
type bits {
bit create {
description
"Any protocol operation that creates a
new data node.";
}
bit read {
description
"Any protocol operation or notification that
returns the value of a data node.";
}
bit update {
description
"Any protocol operation that alters an existing
data node.";
}
bit delete {
description
"Any protocol operation that removes a data node.";
}
bit exec {
description
"Execution access to the specified protocol operation.";
}
}
description
"NETCONF Access Operation.";
}
typedef group-name-type {
type string {
length "1..max";
pattern "[^\*].*";
}
description
"Name of administrative group to which
users can be assigned.";
}
typedef action-type {
type enumeration {
enum permit {
description
"Requested action is permitted.";
}
enum deny {
description
"Requested action is denied.";
}
}
description
"Action taken by the server when a particular
rule matches.";
}
typedef node-instance-identifier {
type yang:xpath1.0;
description
"Path expression used to represent a special
data node instance identifier string.
A node-instance-identifier value is an
unrestricted YANG instance-identifier expression.
All the same rules as an instance-identifier apply
except predicates for keys are optional. If a key
predicate is missing, then the node-instance-identifier
represents all possible server instances for that key.
This XPath expression is evaluated in the following context:
o The set of namespace declarations are those in scope on
the leaf element where this type is used.
o The set of variable bindings contains one variable,
'USER', which contains the name of the user of the current
session.
o The function library is the core function library, but
note that due to the syntax restrictions of an
instance-identifier, no functions are allowed.
o The context node is the root node in the data tree.";
}
/*
* Data definition statements
*/
container nacm {
// nacm:default-deny-all;
description
"Parameters for NETCONF Access Control Model.";
leaf enable-nacm {
type boolean;
default true;
description
"Enables or disables all NETCONF access control
enforcement. If 'true', then enforcement
is enabled. If 'false', then enforcement
is disabled.";
}
leaf read-default {
type action-type;
default "permit";
description
"Controls whether read access is granted if
no appropriate rule is found for a
particular read request.";
}
leaf write-default {
type action-type;
default "deny";
description
"Controls whether create, update, or delete access
is granted if no appropriate rule is found for a
particular write request.";
}
leaf exec-default {
type action-type;
default "permit";
description
"Controls whether exec access is granted if no appropriate
rule is found for a particular protocol operation request.";
}
leaf enable-external-groups {
type boolean;
default true;
description
"Controls whether the server uses the groups reported by the
NETCONF transport layer when it assigns the user to a set of
NACM groups. If this leaf has the value 'false', any group
names reported by the transport layer are ignored by the
server.";
}
leaf denied-operations {
type yang:zero-based-counter32;
config false;
mandatory true;
description
"Number of times since the server last restarted that a
protocol operation request was denied.";
}
leaf denied-data-writes {
type yang:zero-based-counter32;
config false;
mandatory true;
description
"Number of times since the server last restarted that a
protocol operation request to alter
a configuration datastore was denied.";
}
leaf denied-notifications {
type yang:zero-based-counter32;
config false;
mandatory true;
description
"Number of times since the server last restarted that
a notification was dropped for a subscription because
access to the event type was denied.";
}
container groups {
description
"NETCONF Access Control Groups.";
list group {
key name;
description
"One NACM Group Entry. This list will only contain
configured entries, not any entries learned from
any transport protocols.";
leaf name {
type group-name-type;
description
"Group name associated with this entry.";
}
leaf-list user-name {
type user-name-type;
description
"Each entry identifies the username of
a member of the group associated with
this entry.";
}
}
}
list rule-list {
key "name";
ordered-by user;
description
"An ordered collection of access control rules.";
leaf name {
type string {
length "1..max";
}
description
"Arbitrary name assigned to the rule-list.";
}
leaf-list group {
type union {
type matchall-string-type;
type group-name-type;
}
description
"List of administrative groups that will be
assigned the associated access rights
defined by the 'rule' list.
The string '*' indicates that all groups apply to the
entry.";
}
list rule {
key "name";
ordered-by user;
description
"One access control rule.
Rules are processed in user-defined order until a match is
found. A rule matches if 'module-name', 'rule-type', and
'access-operations' match the request. If a rule
matches, the 'action' leaf determines if access is granted
or not.";
leaf name {
type string {
length "1..max";
}
description
"Arbitrary name assigned to the rule.";
}
leaf module-name {
type union {
type matchall-string-type;
type string;
}
default "*";
description
"Name of the module associated with this rule.
This leaf matches if it has the value '*' or if the
object being accessed is defined in the module with the
specified module name.";
}
choice rule-type {
description
"This choice matches if all leafs present in the rule
match the request. If no leafs are present, the
choice matches all requests.";
case protocol-operation {
leaf rpc-name {
type union {
type matchall-string-type;
type string;
}
description
"This leaf matches if it has the value '*' or if
its value equals the requested protocol operation
name.";
}
}
case notification {
leaf notification-name {
type union {
type matchall-string-type;
type string;
}
description
"This leaf matches if it has the value '*' or if its
value equals the requested notification name.";
}
}
case data-node {
leaf path {
type node-instance-identifier;
mandatory true;
description
"Data Node Instance Identifier associated with the
data node controlled by this rule.
Configuration data or state data instance
identifiers start with a top-level data node. A
complete instance identifier is required for this
type of path value.
The special value '/' refers to all possible
datastore contents.";
}
}
}
leaf access-operations {
type union {
type matchall-string-type;
type access-operations-type;
}
default "*";
description
"Access operations associated with this rule.
This leaf matches if it has the value '*' or if the
bit corresponding to the requested operation is set.";
}
leaf action {
type action-type;
mandatory true;
description
"The access control action associated with the
rule. If a rule is determined to match a
particular request, then this object is used
to determine whether to permit or deny the
request.";
}
leaf comment {
type string;
description
"A textual description of the access rule.";
}
}
}
}
}

View File

@ -1,559 +0,0 @@
module ietf-netconf-monitoring {
namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring";
prefix "ncm";
import ietf-yang-types { prefix yang; }
import ietf-inet-types { prefix inet; }
organization
"IETF NETCONF (Network Configuration) Working Group";
contact
"WG Web: <http://tools.ietf.org/wg/netconf/>
WG List: <mailto:netconf@ietf.org>
WG Chair: Mehmet Ersue
<mailto:mehmet.ersue@nsn.com>
WG Chair: Bert Wijnen
<mailto:bertietf@bwijnen.net>
Editor: Mark Scott
<mailto:mark.scott@ericsson.com>
Editor: Martin Bjorklund
<mailto:mbj@tail-f.com>";
description
"NETCONF Monitoring Module.
All elements in this module are read-only.
Copyright (c) 2010 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD
License set forth in Section 4.c of the IETF Trust's
Legal Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC 6022; see
the RFC itself for full legal notices.";
revision 2010-10-04 {
description
"Initial revision.";
reference
"RFC 6022: YANG Module for NETCONF Monitoring";
}
typedef netconf-datastore-type {
type enumeration {
enum running;
enum candidate;
enum startup;
}
description
"Enumeration of possible NETCONF datastore types.";
reference
"RFC 4741: NETCONF Configuration Protocol";
}
identity transport {
description
"Base identity for NETCONF transport types.";
}
identity netconf-ssh {
base transport;
description
"NETCONF over Secure Shell (SSH).";
reference
"RFC 4742: Using the NETCONF Configuration Protocol
over Secure SHell (SSH)";
}
identity netconf-soap-over-beep {
base transport;
description
"NETCONF over Simple Object Access Protocol (SOAP) over
Blocks Extensible Exchange Protocol (BEEP).";
reference
"RFC 4743: Using NETCONF over the Simple Object
Access Protocol (SOAP)";
}
identity netconf-soap-over-https {
base transport;
description
"NETCONF over Simple Object Access Protocol (SOAP)
over Hypertext Transfer Protocol Secure (HTTPS).";
reference
"RFC 4743: Using NETCONF over the Simple Object
Access Protocol (SOAP)";
}
identity netconf-beep {
base transport;
description
"NETCONF over Blocks Extensible Exchange Protocol (BEEP).";
reference
"RFC 4744: Using the NETCONF Protocol over the
Blocks Extensible Exchange Protocol (BEEP)";
}
identity netconf-tls {
base transport;
description
"NETCONF over Transport Layer Security (TLS).";
reference
"RFC 5539: NETCONF over Transport Layer Security (TLS)";
}
identity schema-format {
description
"Base identity for data model schema languages.";
}
identity xsd {
base schema-format;
description
"W3C XML Schema Definition.";
reference
"W3C REC REC-xmlschema-1-20041028:
XML Schema Part 1: Structures";
}
identity yang {
base schema-format;
description
"The YANG data modeling language for NETCONF.";
reference
"RFC 6020: YANG - A Data Modeling Language for the
Network Configuration Protocol (NETCONF)";
}
identity yin {
base schema-format;
description
"The YIN syntax for YANG.";
reference
"RFC 6020: YANG - A Data Modeling Language for the
Network Configuration Protocol (NETCONF)";
}
identity rng {
base schema-format;
description
"Regular Language for XML Next Generation (RELAX NG).";
reference
"ISO/IEC 19757-2:2008: RELAX NG";
}
identity rnc {
base schema-format;
description
"Relax NG Compact Syntax";
reference
"ISO/IEC 19757-2:2008: RELAX NG";
}
grouping common-counters {
description
"Counters that exist both per session, and also globally,
accumulated from all sessions.";
leaf in-rpcs {
type yang:zero-based-counter32;
description
"Number of correct <rpc> messages received.";
}
leaf in-bad-rpcs {
type yang:zero-based-counter32;
description
"Number of messages received when an <rpc> message was expected,
that were not correct <rpc> messages. This includes XML parse
errors and errors on the rpc layer.";
}
leaf out-rpc-errors {
type yang:zero-based-counter32;
description
"Number of <rpc-reply> messages sent that contained an
<rpc-error> element.";
}
leaf out-notifications {
type yang:zero-based-counter32;
description
"Number of <notification> messages sent.";
}
}
container netconf-state {
config false;
description
"The netconf-state container is the root of the monitoring
data model.";
container capabilities {
description
"Contains the list of NETCONF capabilities supported by the
server.";
leaf-list capability {
type inet:uri;
description
"List of NETCONF capabilities supported by the server.";
}
}
container datastores {
description
"Contains the list of NETCONF configuration datastores.";
list datastore {
key name;
description
"List of NETCONF configuration datastores supported by
the NETCONF server and related information.";
leaf name {
type netconf-datastore-type;
description
"Name of the datastore associated with this list entry.";
}
container locks {
presence
"This container is present only if the datastore
is locked.";
description
"The NETCONF <lock> and <partial-lock> operations allow
a client to lock specific resources in a datastore. The
NETCONF server will prevent changes to the locked
resources by all sessions except the one that acquired
the lock(s).
Monitoring information is provided for each datastore
entry including details such as the session that acquired
the lock, the type of lock (global or partial) and the
list of locked resources. Multiple locks per datastore
are supported.";
grouping lock-info {
description
"Lock related parameters, common to both global and
partial locks.";
leaf locked-by-session {
type uint32;
mandatory true;
description
"The session ID of the session that has locked
this resource. Both a global lock and a partial
lock MUST contain the NETCONF session-id.
If the lock is held by a session that is not managed
by the NETCONF server (e.g., a CLI session), a session
id of 0 (zero) is reported.";
reference
"RFC 4741: NETCONF Configuration Protocol";
}
leaf locked-time {
type yang:date-and-time;
mandatory true;
description
"The date and time of when the resource was
locked.";
}
}
choice lock-type {
description
"Indicates if a global lock or a set of partial locks
are set.";
container global-lock {
description
"Present if the global lock is set.";
uses lock-info;
}
list partial-lock {
key lock-id;
description
"List of partial locks.";
reference
"RFC 5717: Partial Lock Remote Procedure Call (RPC) for
NETCONF";
leaf lock-id {
type uint32;
description
"This is the lock id returned in the <partial-lock>
response.";
}
uses lock-info;
leaf-list select {
type yang:xpath1.0;
min-elements 1;
description
"The xpath expression that was used to request
the lock. The select expression indicates the
original intended scope of the lock.";
}
leaf-list locked-node {
type instance-identifier;
description
"The list of instance-identifiers (i.e., the
locked nodes).
The scope of the partial lock is defined by the list
of locked nodes.";
}
}
}
}
}
}
container schemas {
description
"Contains the list of data model schemas supported by the
server.";
list schema {
key "identifier version format";
description
"List of data model schemas supported by the server.";
leaf identifier {
type string;
description
"Identifier to uniquely reference the schema. The
identifier is used in the <get-schema> operation and may
be used for other purposes such as file retrieval.
For modeling languages that support or require a data
model name (e.g., YANG module name) the identifier MUST
match that name. For YANG data models, the identifier is
the name of the module or submodule. In other cases, an
identifier such as a filename MAY be used instead.";
}
leaf version {
type string;
description
"Version of the schema supported. Multiple versions MAY be
supported simultaneously by a NETCONF server. Each
version MUST be reported individually in the schema list,
i.e., with same identifier, possibly different location,
but different version.
For YANG data models, version is the value of the most
recent YANG 'revision' statement in the module or
submodule, or the empty string if no 'revision' statement
is present.";
}
leaf format {
type identityref {
base schema-format;
}
description
"The data modeling language the schema is written
in (currently xsd, yang, yin, rng, or rnc).
For YANG data models, 'yang' format MUST be supported and
'yin' format MAY also be provided.";
}
leaf namespace {
type inet:uri;
mandatory true;
description
"The XML namespace defined by the data model.
For YANG data models, this is the module's namespace.
If the list entry describes a submodule, this field
contains the namespace of the module to which the
submodule belongs.";
}
leaf-list location {
type union {
type enumeration {
enum "NETCONF";
}
type inet:uri;
}
description
"One or more locations from which the schema can be
retrieved. This list SHOULD contain at least one
entry per schema.
A schema entry may be located on a remote file system
(e.g., reference to file system for ftp retrieval) or
retrieved directly from a server supporting the
<get-schema> operation (denoted by the value 'NETCONF').";
}
}
}
container sessions {
description
"The sessions container includes session-specific data for
NETCONF management sessions. The session list MUST include
all currently active NETCONF sessions.";
list session {
key session-id;
description
"All NETCONF sessions managed by the NETCONF server
MUST be reported in this list.";
leaf session-id {
type uint32 {
range "1..max";
}
description
"Unique identifier for the session. This value is the
NETCONF session identifier, as defined in RFC 4741.";
reference
"RFC 4741: NETCONF Configuration Protocol";
}
leaf transport {
type identityref {
base transport;
}
mandatory true;
description
"Identifies the transport for each session, e.g.,
'netconf-ssh', 'netconf-soap', etc.";
}
leaf username {
type string;
mandatory true;
description
"The username is the client identity that was authenticated
by the NETCONF transport protocol. The algorithm used to
derive the username is NETCONF transport protocol specific
and in addition specific to the authentication mechanism
used by the NETCONF transport protocol.";
}
leaf source-host {
type inet:host;
description
"Host identifier of the NETCONF client. The value
returned is implementation specific (e.g., hostname,
IPv4 address, IPv6 address)";
}
leaf login-time {
type yang:date-and-time;
mandatory true;
description
"Time at the server at which the session was established.";
}
uses common-counters {
description
"Per-session counters. Zero based with following reset
behaviour:
- at start of a session
- when max value is reached";
}
}
}
container statistics {
description
"Statistical data pertaining to the NETCONF server.";
leaf netconf-start-time {
type yang:date-and-time;
description
"Date and time at which the management subsystem was
started.";
}
leaf in-bad-hellos {
type yang:zero-based-counter32;
description
"Number of sessions silently dropped because an
invalid <hello> message was received. This includes <hello>
messages with a 'session-id' attribute, bad namespace, and
bad capability declarations.";
}
leaf in-sessions {
type yang:zero-based-counter32;
description
"Number of sessions started. This counter is incremented
when a <hello> message with a <session-id> is sent.
'in-sessions' - 'in-bad-hellos' =
'number of correctly started netconf sessions'";
}
leaf dropped-sessions {
type yang:zero-based-counter32;
description
"Number of sessions that were abnormally terminated, e.g.,
due to idle timeout or transport close. This counter is not
incremented when a session is properly closed by a
<close-session> operation, or killed by a <kill-session>
operation.";
}
uses common-counters {
description
"Global counters, accumulated from all sessions.
Zero based with following reset behaviour:
- re-initialization of NETCONF server
- when max value is reached";
}
}
}
rpc get-schema {
description
"This operation is used to retrieve a schema from the
NETCONF server.
Positive Response:
The NETCONF server returns the requested schema.
Negative Response:
If requested schema does not exist, the <error-tag> is
'invalid-value'.
If more than one schema matches the requested parameters, the
<error-tag> is 'operation-failed', and <error-app-tag> is
'data-not-unique'.";
input {
leaf identifier {
type string;
mandatory true;
description
"Identifier for the schema list entry.";
}
leaf version {
type string;
description
"Version of the schema requested. If this parameter is not
present, and more than one version of the schema exists on
the server, a 'data-not-unique' error is returned, as
described above.";
}
leaf format {
type identityref {
base schema-format;
}
description
"The data modeling language of the schema. If this
parameter is not present, and more than one formats of
the schema exists on the server, a 'data-not-unique' error
is returned, as described above.";
}
}
output {
anyxml data {
description
"Contains the schema content.";
}
}
}
}

View File

@ -1,337 +0,0 @@
module ietf-netconf-notifications {
namespace
"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications";
prefix ncn;
import ietf-inet-types { prefix inet; }
import ietf-netconf { prefix nc; }
organization
"IETF NETCONF (Network Configuration Protocol) Working Group";
contact
"WG Web: <http://tools.ietf.org/wg/netconf/>
WG List: <mailto:netconf@ietf.org>
WG Chair: Bert Wijnen
<mailto:bertietf@bwijnen.net>
WG Chair: Mehmet Ersue
<mailto:mehmet.ersue@nsn.com>
Editor: Andy Bierman
<mailto:andy@netconfcentral.org>";
description
"This module defines a YANG data model for use with the
NETCONF protocol that allows the NETCONF client to
receive common NETCONF base event notifications.
Copyright (c) 2012 IETF Trust and the persons identified as
the document authors. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC 6470; see
the RFC itself for full legal notices.";
revision "2012-02-06" {
description
"Initial version.";
reference
"RFC 6470: NETCONF Base Notifications";
}
grouping common-session-parms {
description
"Common session parameters to identify a
management session.";
leaf username {
type string;
mandatory true;
description
"Name of the user for the session.";
}
leaf session-id {
type nc:session-id-or-zero-type;
mandatory true;
description
"Identifier of the session.
A NETCONF session MUST be identified by a non-zero value.
A non-NETCONF session MAY be identified by the value zero.";
}
leaf source-host {
type inet:ip-address;
description
"Address of the remote host for the session.";
}
}
grouping changed-by-parms {
description
"Common parameters to identify the source
of a change event, such as a configuration
or capability change.";
container changed-by {
description
"Indicates the source of the change.
If caused by internal action, then the
empty leaf 'server' will be present.
If caused by a management session, then
the name, remote host address, and session ID
of the session that made the change will be reported.";
choice server-or-user {
mandatory true;
leaf server {
type empty;
description
"If present, the change was caused
by the server.";
}
case by-user {
uses common-session-parms;
}
} // choice server-or-user
} // container changed-by-parms
}
notification netconf-config-change {
description
"Generated when the NETCONF server detects that the
<running> or <startup> configuration datastore
has been changed by a management session.
The notification summarizes the edits that
have been detected.
The server MAY choose to also generate this
notification while loading a datastore during the
boot process for the device.";
uses changed-by-parms;
leaf datastore {
type enumeration {
enum running {
description "The <running> datastore has changed.";
}
enum startup {
description "The <startup> datastore has changed";
}
}
default "running";
description
"Indicates which configuration datastore has changed.";
}
list edit {
description
"An edit record SHOULD be present for each distinct
edit operation that the server has detected on
the target datastore. This list MAY be omitted
if the detailed edit operations are not known.
The server MAY report entries in this list for
changes not made by a NETCONF session (e.g., CLI).";
leaf target {
type instance-identifier;
description
"Topmost node associated with the configuration change.
A server SHOULD set this object to the node within
the datastore that is being altered. A server MAY
set this object to one of the ancestors of the actual
node that was changed, or omit this object, if the
exact node is not known.";
}
leaf operation {
type nc:edit-operation-type;
description
"Type of edit operation performed.
A server MUST set this object to the NETCONF edit
operation performed on the target datastore.";
}
} // list edit
} // notification netconf-config-change
notification netconf-capability-change {
description
"Generated when the NETCONF server detects that
the server capabilities have changed.
Indicates which capabilities have been added, deleted,
and/or modified. The manner in which a server
capability is changed is outside the scope of this
document.";
uses changed-by-parms;
leaf-list added-capability {
type inet:uri;
description
"List of capabilities that have just been added.";
}
leaf-list deleted-capability {
type inet:uri;
description
"List of capabilities that have just been deleted.";
}
leaf-list modified-capability {
type inet:uri;
description
"List of capabilities that have just been modified.
A capability is considered to be modified if the
base URI for the capability has not changed, but
one or more of the parameters encoded at the end of
the capability URI have changed.
The new modified value of the complete URI is returned.";
}
} // notification netconf-capability-change
notification netconf-session-start {
description
"Generated when a NETCONF server detects that a
NETCONF session has started. A server MAY generate
this event for non-NETCONF management sessions.
Indicates the identity of the user that started
the session.";
uses common-session-parms;
} // notification netconf-session-start
notification netconf-session-end {
description
"Generated when a NETCONF server detects that a
NETCONF session has terminated.
A server MAY optionally generate this event for
non-NETCONF management sessions. Indicates the
identity of the user that owned the session,
and why the session was terminated.";
uses common-session-parms;
leaf killed-by {
when "../termination-reason = 'killed'";
type nc:session-id-type;
description
"The ID of the session that directly caused this session
to be abnormally terminated. If this session was abnormally
terminated by a non-NETCONF session unknown to the server,
then this leaf will not be present.";
}
leaf termination-reason {
type enumeration {
enum "closed" {
description
"The session was terminated by the client in normal
fashion, e.g., by the NETCONF <close-session>
protocol operation.";
}
enum "killed" {
description
"The session was terminated in abnormal
fashion, e.g., by the NETCONF <kill-session>
protocol operation.";
}
enum "dropped" {
description
"The session was terminated because the transport layer
connection was unexpectedly closed.";
}
enum "timeout" {
description
"The session was terminated because of inactivity,
e.g., waiting for the <hello> message or <rpc>
messages.";
}
enum "bad-hello" {
description
"The client's <hello> message was invalid.";
}
enum "other" {
description
"The session was terminated for some other reason.";
}
}
mandatory true;
description
"Reason the session was terminated.";
}
} // notification netconf-session-end
notification netconf-confirmed-commit {
description
"Generated when a NETCONF server detects that a
confirmed-commit event has occurred. Indicates the event
and the current state of the confirmed-commit procedure
in progress.";
reference
"RFC 6241, Section 8.4";
uses common-session-parms {
when "../confirm-event != 'timeout'";
}
leaf confirm-event {
type enumeration {
enum "start" {
description
"The confirmed-commit procedure has started.";
}
enum "cancel" {
description
"The confirmed-commit procedure has been canceled,
e.g., due to the session being terminated, or an
explicit <cancel-commit> operation.";
}
enum "timeout" {
description
"The confirmed-commit procedure has been canceled
due to the confirm-timeout interval expiring.
The common session parameters will not be present
in this sub-mode.";
}
enum "extend" {
description
"The confirmed-commit timeout has been extended,
e.g., by a new <confirmed-commit> operation.";
}
enum "complete" {
description
"The confirmed-commit procedure has been completed.";
}
}
mandatory true;
description
"Indicates the event that caused the notification.";
}
leaf timeout {
when
"../confirm-event = 'start' or ../confirm-event = 'extend'";
type uint32;
units "seconds";
description
"The configured timeout value if the event type
is 'start' or 'extend'. This value represents
the approximate number of seconds from the event
time when the 'timeout' event might occur.";
}
} // notification netconf-confirmed-commit
}

View File

@ -1,165 +0,0 @@
module ietf-netconf-with-defaults {
namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults";
prefix ncwd;
import ietf-netconf { prefix nc; }
organization
"IETF NETCONF (Network Configuration Protocol) Working Group";
contact
"WG Web: <http://tools.ietf.org/wg/netconf/>
WG List: <mailto:netconf@ietf.org>
WG Chair: Bert Wijnen
<mailto:bertietf@bwijnen.net>
WG Chair: Mehmet Ersue
<mailto:mehmet.ersue@nsn.com>
Editor: Andy Bierman
<mailto:andy.bierman@brocade.com>
Editor: Balazs Lengyel
<mailto:balazs.lengyel@ericsson.com>";
description
"This module defines an extension to the NETCONF protocol
that allows the NETCONF client to control how default
values are handled by the server in particular NETCONF operations.
Copyright (c) 2010 IETF Trust and the persons identified as
the document authors. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices.";
// RFC Ed.: replace XXXX with actual RFC number and remove this note
// RFC Ed.: remove this note
// Note: extracted from draft-ietf-netmod-with-defaults-10.txt
revision 2010-06-09 {
description
"Initial version.";
reference
"RFC XXXX: With-defaults capability for NETCONF";
}
// RFC Ed.: replace XXXX with actual
// RFC number and remove this note
typedef with-defaults-mode {
description
"Possible modes to report default data.";
reference
"RFC XXXX; section 3.";
// RFC Ed.: replace XXXX with actual
// RFC number and remove this note
type enumeration {
enum report-all {
description
"All default data is reported.";
reference
"RFC XXXX; section 3.1";
// RFC Ed.: replace XXXX with actual
// RFC number and remove this note
}
enum report-all-tagged {
description
"All default data is reported.
Any nodes considered to be default data
will contain a 'wd:default' XML attribute,
set to 'true'.";
reference
"RFC XXXX; section 3.4";
// RFC Ed.: replace XXXX with actual
// RFC number and remove this note
}
enum trim {
description
"Values are not reported if they contain the default.";
reference
"RFC XXXX; section 3.2";
// RFC Ed.: replace XXXX with actual
// RFC number and remove this note
}
enum explicit {
description
"Report values that contain the definition of
explicitly set data.";
reference
"RFC XXXX; section 3.3";
// RFC Ed.: replace XXXX with actual
// RFC number and remove this note
}
}
}
grouping with-defaults-parameters {
description
"Contains the <with-defaults> parameter for control
of defaults in NETCONF retrieval operations.";
leaf with-defaults {
description
"The explicit defaults processing mode requested.";
reference
"RFC XXXX; section 4.6.1";
// RFC Ed.: replace XXXX with actual
// RFC number and remove this note
type with-defaults-mode;
}
}
// extending the get-config operation
augment /nc:get-config/nc:input {
description
"Adds the <with-defaults> parameter to the
input of the NETCONF <get-config> operation.";
reference
"RFC XXXX; section 4.6.1";
// RFC Ed.: replace XXXX with actual
// RFC number and remove this note
uses with-defaults-parameters;
}
// extending the get operation
augment /nc:get/nc:input {
description
"Adds the <with-defaults> parameter to
the input of the NETCONF <get> operation.";
reference
"RFC XXXX; section 4.6.1";
// RFC Ed.: replace XXXX with actual
// RFC number and remove this note
uses with-defaults-parameters;
}
// extending the copy-config operation
augment /nc:copy-config/nc:input {
description
"Adds the <with-defaults> parameter to
the input of the NETCONF <copy-config> operation.";
reference
"RFC XXXX; section 4.6.1";
// RFC Ed.: replace XXXX with actual
// RFC number and remove this note
uses with-defaults-parameters;
}
}

View File

@ -1,980 +0,0 @@
module ietf-netconf {
// the namespace for NETCONF XML definitions is unchanged
// from RFC 4741, which this document replaces
namespace "urn:ietf:params:xml:ns:netconf:base:1.0";
prefix nc;
import ietf-inet-types {
prefix inet;
}
organization
"IETF NETCONF (Network Configuration) Working Group";
contact
"WG Web: <http://tools.ietf.org/wg/netconf/>
WG List: <netconf@ietf.org>
WG Chair: Bert Wijnen
<bertietf@bwijnen.net>
WG Chair: Mehmet Ersue
<mehmet.ersue@nsn.com>
Editor: Martin Bjorklund
<mbj@tail-f.com>
Editor: Juergen Schoenwaelder
<j.schoenwaelder@jacobs-university.de>
Editor: Andy Bierman
<andy.bierman@brocade.com>";
description
"NETCONF Protocol Data Types and Protocol Operations.
Copyright (c) 2011 IETF Trust and the persons identified as
the document authors. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC 6241; see
the RFC itself for full legal notices.";
revision 2011-06-01 {
description
"Initial revision;";
reference
"RFC 6241: Network Configuration Protocol";
}
extension get-filter-element-attributes {
description
"If this extension is present within an 'anyxml'
statement named 'filter', which must be conceptually
defined within the RPC input section for the <get>
and <get-config> protocol operations, then the
following unqualified XML attribute is supported
within the <filter> element, within a <get> or
<get-config> protocol operation:
type : optional attribute with allowed
value strings 'subtree' and 'xpath'.
If missing, the default value is 'subtree'.
If the 'xpath' feature is supported, then the
following unqualified XML attribute is
also supported:
select: optional attribute containing a
string representing an XPath expression.
The 'type' attribute must be equal to 'xpath'
if this attribute is present.";
}
// NETCONF capabilities defined as features
feature writable-running {
description
"NETCONF :writable-running capability;
If the server advertises the :writable-running
capability for a session, then this feature must
also be enabled for that session. Otherwise,
this feature must not be enabled.";
reference "RFC 6241, Section 8.2";
}
feature candidate {
description
"NETCONF :candidate capability;
If the server advertises the :candidate
capability for a session, then this feature must
also be enabled for that session. Otherwise,
this feature must not be enabled.";
reference "RFC 6241, Section 8.3";
}
feature confirmed-commit {
if-feature candidate;
description
"NETCONF :confirmed-commit:1.1 capability;
If the server advertises the :confirmed-commit:1.1
capability for a session, then this feature must
also be enabled for that session. Otherwise,
this feature must not be enabled.";
reference "RFC 6241, Section 8.4";
}
feature rollback-on-error {
description
"NETCONF :rollback-on-error capability;
If the server advertises the :rollback-on-error
capability for a session, then this feature must
also be enabled for that session. Otherwise,
this feature must not be enabled.";
reference "RFC 6241, Section 8.5";
}
feature validate {
description
"NETCONF :validate:1.1 capability;
If the server advertises the :validate:1.1
capability for a session, then this feature must
also be enabled for that session. Otherwise,
this feature must not be enabled.";
reference "RFC 6241, Section 8.6";
}
feature startup {
description
"NETCONF :startup capability;
If the server advertises the :startup
capability for a session, then this feature must
also be enabled for that session. Otherwise,
this feature must not be enabled.";
reference "RFC 6241, Section 8.7";
}
feature url {
description
"NETCONF :url capability;
If the server advertises the :url
capability for a session, then this feature must
also be enabled for that session. Otherwise,
this feature must not be enabled.";
reference "RFC 6241, Section 8.8";
}
feature xpath {
description
"NETCONF :xpath capability;
If the server advertises the :xpath
capability for a session, then this feature must
also be enabled for that session. Otherwise,
this feature must not be enabled.";
reference "RFC 6241, Section 8.9";
}
// NETCONF Simple Types
typedef session-id-type {
type uint32 {
range "1..max";
}
description
"NETCONF Session Id";
}
typedef session-id-or-zero-type {
type uint32;
description
"NETCONF Session Id or Zero to indicate none";
}
typedef error-tag-type {
type enumeration {
enum in-use {
description
"The request requires a resource that
already is in use.";
}
enum invalid-value {
description
"The request specifies an unacceptable value for one
or more parameters.";
}
enum too-big {
description
"The request or response (that would be generated) is
too large for the implementation to handle.";
}
enum missing-attribute {
description
"An expected attribute is missing.";
}
enum bad-attribute {
description
"An attribute value is not correct; e.g., wrong type,
out of range, pattern mismatch.";
}
enum unknown-attribute {
description
"An unexpected attribute is present.";
}
enum missing-element {
description
"An expected element is missing.";
}
enum bad-element {
description
"An element value is not correct; e.g., wrong type,
out of range, pattern mismatch.";
}
enum unknown-element {
description
"An unexpected element is present.";
}
enum unknown-namespace {
description
"An unexpected namespace is present.";
}
enum access-denied {
description
"Access to the requested protocol operation or
data model is denied because authorization failed.";
}
enum lock-denied {
description
"Access to the requested lock is denied because the
lock is currently held by another entity.";
}
enum resource-denied {
description
"Request could not be completed because of
insufficient resources.";
}
enum rollback-failed {
description
"Request to roll back some configuration change (via
rollback-on-error or <discard-changes> operations)
was not completed for some reason.";
}
enum data-exists {
description
"Request could not be completed because the relevant
data model content already exists. For example,
a 'create' operation was attempted on data that
already exists.";
}
enum data-missing {
description
"Request could not be completed because the relevant
data model content does not exist. For example,
a 'delete' operation was attempted on
data that does not exist.";
}
enum operation-not-supported {
description
"Request could not be completed because the requested
operation is not supported by this implementation.";
}
enum operation-failed {
description
"Request could not be completed because the requested
operation failed for some reason not covered by
any other error condition.";
}
enum partial-operation {
description
"This error-tag is obsolete, and SHOULD NOT be sent
by servers conforming to this document.";
}
enum malformed-message {
description
"A message could not be handled because it failed to
be parsed correctly. For example, the message is not
well-formed XML or it uses an invalid character set.";
}
}
description "NETCONF Error Tag";
reference "RFC 6241, Appendix A";
}
typedef error-severity-type {
type enumeration {
enum error {
description "Error severity";
}
enum warning {
description "Warning severity";
}
}
description "NETCONF Error Severity";
reference "RFC 6241, Section 4.3";
}
typedef edit-operation-type {
type enumeration {
enum merge {
description
"The configuration data identified by the
element containing this attribute is merged
with the configuration at the corresponding
level in the configuration datastore identified
by the target parameter.";
}
enum replace {
description
"The configuration data identified by the element
containing this attribute replaces any related
configuration in the configuration datastore
identified by the target parameter. If no such
configuration data exists in the configuration
datastore, it is created. Unlike a
<copy-config> operation, which replaces the
entire target configuration, only the configuration
actually present in the config parameter is affected.";
}
enum create {
description
"The configuration data identified by the element
containing this attribute is added to the
configuration if and only if the configuration
data does not already exist in the configuration
datastore. If the configuration data exists, an
<rpc-error> element is returned with an
<error-tag> value of 'data-exists'.";
}
enum delete {
description
"The configuration data identified by the element
containing this attribute is deleted from the
configuration if and only if the configuration
data currently exists in the configuration
datastore. If the configuration data does not
exist, an <rpc-error> element is returned with
an <error-tag> value of 'data-missing'.";
}
enum remove {
description
"The configuration data identified by the element
containing this attribute is deleted from the
configuration if the configuration
data currently exists in the configuration
datastore. If the configuration data does not
exist, the 'remove' operation is silently ignored
by the server.";
}
}
default "merge";
description "NETCONF 'operation' attribute values";
reference "RFC 6241, Section 7.2";
}
// NETCONF Standard Protocol Operations
rpc get-config {
description
"Retrieve all or part of a specified configuration.";
reference "RFC 6241, Section 7.1";
input {
container source {
description
"Particular configuration to retrieve.";
choice config-source {
mandatory true;
description
"The configuration to retrieve.";
case candidate {
leaf candidate {
if-feature candidate;
type empty;
description
"The candidate configuration is the config source.";
}
}
case running {
leaf running {
type empty;
description
"The running configuration is the config source.";
}
}
case startup {
leaf startup {
if-feature startup;
type empty;
description
"The startup configuration is the config source.
This is optional-to-implement on the server because
not all servers will support filtering for this
datastore.";
}
}
}
}
anyxml filter {
description
"Subtree or XPath filter to use.";
// nc:get-filter-element-attributes;
}
}
output {
anyxml data {
description
"Copy of the source datastore subset that matched
the filter criteria (if any). An empty data container
indicates that the request did not produce any results.";
}
}
}
rpc edit-config {
description
"The <edit-config> operation loads all or part of a specified
configuration to the specified target configuration.";
reference "RFC 6241, Section 7.2";
input {
container target {
description
"Particular configuration to edit.";
choice config-target {
mandatory true;
description
"The configuration target.";
case candidate {
leaf candidate {
if-feature candidate;
type empty;
description
"The candidate configuration is the config target.";
}
}
case running {
leaf running {
if-feature writable-running;
type empty;
description
"The running configuration is the config source.";
}
}
}
}
leaf default-operation {
type enumeration {
enum merge {
description
"The default operation is merge.";
}
enum replace {
description
"The default operation is replace.";
}
enum none {
description
"There is no default operation.";
}
}
default "merge";
description
"The default operation to use.";
}
leaf test-option {
if-feature validate;
type enumeration {
enum test-then-set {
description
"The server will test and then set if no errors.";
}
enum set {
description
"The server will set without a test first.";
}
enum test-only {
description
"The server will only test and not set, even
if there are no errors.";
}
}
default "test-then-set";
description
"The test option to use.";
}
leaf error-option {
type enumeration {
enum stop-on-error {
description
"The server will stop on errors.";
}
enum continue-on-error {
description
"The server may continue on errors.";
}
enum rollback-on-error {
description
"The server will roll back on errors.
This value can only be used if the 'rollback-on-error'
feature is supported.";
}
}
default "stop-on-error";
description
"The error option to use.";
}
choice edit-content {
mandatory true;
description
"The content for the edit operation.";
case config {
anyxml config {
description
"Inline Config content.";
}
}
case url {
leaf url {
if-feature url;
type inet:uri;
description
"URL-based config content.";
}
}
}
}
}
rpc copy-config {
description
"Create or replace an entire configuration datastore with the
contents of another complete configuration datastore.";
reference "RFC 6241, Section 7.3";
input {
container target {
description
"Particular configuration to copy to.";
choice config-target {
mandatory true;
description
"The configuration target of the copy operation.";
case candidate {
leaf candidate {
if-feature candidate;
type empty;
description
"The candidate configuration is the config target.";
}
}
case running {
leaf running {
if-feature writable-running;
type empty;
description
"The running configuration is the config target.
This is optional-to-implement on the server.";
}
}
case startup {
leaf startup {
if-feature startup;
type empty;
description
"The startup configuration is the config target.";
}
}
case url {
leaf url {
if-feature url;
type inet:uri;
description
"The URL-based configuration is the config target.";
}
}
}
}
container source {
description
"Particular configuration to copy from.";
choice config-source {
mandatory true;
description
"The configuration source for the copy operation.";
case candidate {
leaf candidate {
if-feature candidate;
type empty;
description
"The candidate configuration is the config source.";
}
}
case running {
leaf running {
type empty;
description
"The running configuration is the config source.";
}
}
case startup {
leaf startup {
if-feature startup;
type empty;
description
"The startup configuration is the config source.";
}
}
case url {
leaf url {
if-feature url;
type inet:uri;
description
"The URL-based configuration is the config source.";
}
}
case config {
anyxml config {
description
"Inline Config content: <config> element. Represents
an entire configuration datastore, not
a subset of the running datastore.";
}
}
}
}
}
}
rpc delete-config {
description
"Delete a configuration datastore.";
reference "RFC 6241, Section 7.4";
input {
container target {
description
"Particular configuration to delete.";
choice config-target {
mandatory true;
description
"The configuration target to delete.";
case startup {
leaf startup {
if-feature startup;
type empty;
description
"The startup configuration is the config target.";
}
}
case url {
leaf url {
if-feature url;
type inet:uri;
description
"The URL-based configuration is the config target.";
}
}
}
}
}
}
rpc lock {
description
"The lock operation allows the client to lock the configuration
system of a device.";
reference "RFC 6241, Section 7.5";
input {
container target {
description
"Particular configuration to lock.";
choice config-target {
mandatory true;
description
"The configuration target to lock.";
case candidate {
leaf candidate {
if-feature candidate;
type empty;
description
"The candidate configuration is the config target.";
}
}
case running {
leaf running {
type empty;
description
"The running configuration is the config target.";
}
}
case startup {
leaf startup {
if-feature startup;
type empty;
description
"The startup configuration is the config target.";
}
}
}
}
}
}
rpc unlock {
description
"The unlock operation is used to release a configuration lock,
previously obtained with the 'lock' operation.";
reference "RFC 6241, Section 7.6";
input {
container target {
description
"Particular configuration to unlock.";
choice config-target {
mandatory true;
description
"The configuration target to unlock.";
case candidate {
leaf candidate {
if-feature candidate;
type empty;
description
"The candidate configuration is the config target.";
}
}
case running {
leaf running {
type empty;
description
"The running configuration is the config target.";
}
}
case startup {
leaf startup {
if-feature startup;
type empty;
description
"The startup configuration is the config target.";
}
}
}
}
}
}
rpc get {
description
"Retrieve running configuration and device state information.";
reference "RFC 6241, Section 7.7";
input {
anyxml filter {
description
"This parameter specifies the portion of the system
configuration and state data to retrieve.";
// nc:get-filter-element-attributes;
}
}
output {
anyxml data {
description
"Copy of the running datastore subset and/or state
data that matched the filter criteria (if any).
An empty data container indicates that the request did not
produce any results.";
}
}
}
rpc close-session {
description
"Request graceful termination of a NETCONF session.";
reference "RFC 6241, Section 7.8";
}
rpc kill-session {
description
"Force the termination of a NETCONF session.";
reference "RFC 6241, Section 7.9";
input {
leaf session-id {
type session-id-type;
mandatory true;
description
"Particular session to kill.";
}
}
}
rpc commit {
if-feature candidate;
description
"Commit the candidate configuration as the device's new
current configuration.";
reference "RFC 6241, Section 8.3.4.1";
input {
leaf confirmed {
if-feature confirmed-commit;
type empty;
description
"Requests a confirmed commit.";
reference "RFC 6241, Section 8.3.4.1";
}
leaf confirm-timeout {
if-feature confirmed-commit;
type uint32 {
range "1..max";
}
units "seconds";
default "600"; // 10 minutes
description
"The timeout interval for a confirmed commit.";
reference "RFC 6241, Section 8.3.4.1";
}
leaf persist {
if-feature confirmed-commit;
type string;
description
"This parameter is used to make a confirmed commit
persistent. A persistent confirmed commit is not aborted
if the NETCONF session terminates. The only way to abort
a persistent confirmed commit is to let the timer expire,
or to use the <cancel-commit> operation.
The value of this parameter is a token that must be given
in the 'persist-id' parameter of <commit> or
<cancel-commit> operations in order to confirm or cancel
the persistent confirmed commit.
The token should be a random string.";
reference "RFC 6241, Section 8.3.4.1";
}
leaf persist-id {
if-feature confirmed-commit;
type string;
description
"This parameter is given in order to commit a persistent
confirmed commit. The value must be equal to the value
given in the 'persist' parameter to the <commit> operation.
If it does not match, the operation fails with an
'invalid-value' error.";
reference "RFC 6241, Section 8.3.4.1";
}
}
}
rpc discard-changes {
if-feature candidate;
description
"Revert the candidate configuration to the current
running configuration.";
reference "RFC 6241, Section 8.3.4.2";
}
rpc cancel-commit {
if-feature confirmed-commit;
description
"This operation is used to cancel an ongoing confirmed commit.
If the confirmed commit is persistent, the parameter
'persist-id' must be given, and it must match the value of the
'persist' parameter.";
reference "RFC 6241, Section 8.4.4.1";
input {
leaf persist-id {
type string;
description
"This parameter is given in order to cancel a persistent
confirmed commit. The value must be equal to the value
given in the 'persist' parameter to the <commit> operation.
If it does not match, the operation fails with an
'invalid-value' error.";
}
}
}
rpc validate {
if-feature validate;
description
"Validates the contents of the specified configuration.";
reference "RFC 6241, Section 8.6.4.1";
input {
container source {
description
"Particular configuration to validate.";
choice config-source {
mandatory true;
description
"The configuration source to validate.";
case candidate {
leaf candidate {
if-feature candidate;
type empty;
description
"The candidate configuration is the config source.";
}
}
case running {
leaf running {
type empty;
description
"The running configuration is the config source.";
}
}
case startup {
leaf startup {
if-feature startup;
type empty;
description
"The startup configuration is the config source.";
}
}
case url {
leaf url {
if-feature url;
type inet:uri;
description
"The URL-based configuration is the config source.";
}
}
case config {
anyxml config {
description
"Inline Config content: <config> element. Represents
an entire configuration datastore, not
a subset of the running datastore.";
}
}
}
}
}
}
}

View File

@ -23,10 +23,10 @@ module ietf-system-microsemi {
revision-date 2014-08-06;
}
import ietf-netconf-acm {
prefix nacm;
revision-date 2012-02-22;
}
// import ietf-netconf-acm {
// prefix nacm;
// revision-date 2012-02-22;
// }
/*** META INFORMATION ***/
@ -351,7 +351,7 @@ module ietf-system-microsemi {
augment "/sys:system-state/sys:platform" {
description
"Extends the SYSTEM-STATE with some extra configuration attributes required for setup.
"Extends the SYSTEM-STATE platform with some extra configuration attributes required for setup.
All attributes are automatically config=false because they extend system-state";
@ -410,118 +410,4 @@ module ietf-system-microsemi {
}
}
}
rpc do-upgrade-and-reboot {
// nacm:default-deny-all;
if-feature remote-upgrade;
description "Method to perform an upgrade of the device. This
expects a file /update.tar to have be present on the device.
The system-state/remote-upgrade attributes can be used to
verify the contents of the file before calling this action.
If there is a problem performing the upgrade
these will be described in any error thrown";
input {
leaf reset-option {
type enumeration {
enum nuclear {
description "Erases all configuration and resets the device to
factory defaults.";
}
enum allnetconf {
description "Reset all NETCONF data - leaves only logs and SSH keys.
If a lesser reset is required use system-restart with a
suitable reset-option";
}
}
description "Optionally specify a parameter that can be
used to reset the device to factory defaults";
}
}
output {
anyxml data {
description "A message describing the result.
The result might not be seen as it schedules a reboot of the device";
}
}
}
rpc pull-update-tar-from-tftp {
// nacm:default-deny-all;
if-feature remote-upgrade;
description "Pulls a specified file from the specifed host and copies it
to the local device (usually at /update.tar
It also expects the file to be signed with GnuPG and the signature
file to exist on the TFTP server at <tftp-file>.asc";
input {
leaf tftp-file {
type msea:file-name;
mandatory true;
description "The name of a file to pull from the TFTP server at the host name specified";
}
leaf tftp-host {
type inet:host;
mandatory true;
description "The hostname of a TFTP server where an update TAR file can be pulled from";
}
}
}
rpc read-from-syslog {
description "A method of reading the entries from syslog. If no
argument is given will read the last 100 lines";
input {
leaf start-line {
type int16 {
range -10000..-1;
}
default -100;
description "The number of lines to read from the end of syslog.";
}
}
output {
anyxml data {
description "Syslog entries represented as XML";
}
}
}
// notification upgrade-notification {
// description
// "Generated when a remote upgrade is in progress.";
//
// leaf upgrade-stage {
// type enumeration {
// enum "check" {
// description
// "Checking the upgrade file is valid";
// }
// enum "erase" {
// description "Erasing old image";
// }
// enum "write" {
// description "Writing new image";
// }
// enum "complete" {
// description "Upgrade complete";
// }
// }
// mandatory true;
// }
//
// leaf upgrade-detail {
// description "Textual description of the stage of upgrade";
// type string {
// length 0..100;
// }
// }
// } // upgrade-notification
}

View File

@ -1,215 +0,0 @@
module ietf-system-tls-auth {
yang-version 1;
namespace
"urn:ietf:params:xml:ns:yang:ietf-system-tls-auth";
prefix system-tls-auth;
import ietf-system {
prefix sys;
}
import ietf-netconf-acm {
prefix nacm;
}
import ietf-yang-types {
prefix yang;
}
import ietf-x509-cert-to-name {
prefix x509c2n;
}
organization
"IETF NETCONF (Network Configuration) Working Group";
contact
"WG Web: <http://tools.ietf.org/wg/netconf/>
WG List: <mailto:netconf@ietf.org>
WG Chair: Mehmet Ersue
<mailto:mehmet.ersue@nsn.com>
WG Chair: Bert Wijnen
<mailto:bertietf@bwijnen.net>
Editor: Kent Watsen
<mailto:kwatsen@juniper.net>
Juergen Schoenwaelder
<mailto:j.schoenwaelder@jacobs-university.de>";
description
"This module augments the ietf-system module in order to
add TLS authentication configuration nodes to the
'authentication' container.
Copyright (c) 2014 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD
License set forth in Section 4.c of the IETF Trust's
Legal Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices.";
revision "2014-05-24" {
description "Initial version";
reference
"RFC XXXX: NETCONF Server Configuration Model";
}
feature tls-map-certificates {
description
"The tls-map-certificates feature indicates that the
NETCONF server implements mapping X.509 certificates to NETCONF
usernames.";
}
feature tls-map-pre-shared-keys {
description
"The tls-map-pre-shared-keys feature indicates that the
NETCONF server implements mapping TLS pre-shared keys to NETCONF
usernames.";
}
grouping tls-global-config {
container trusted-ca-certs {
description
"A list of Certificate Authority (CA) certificates that a
NETCONF server can use to authenticate a NETCONF client's
certificate. A client's certificate is authenticated if
its Issuer matches one of the configured trusted CA
certificates.";
leaf-list trusted-ca-cert {
type binary;
description
"The binary certificate structure, as
specified by RFC 5246, Section 7.4.6, i.e.,:
opaque ASN.1Cert<1..2^24>;
";
reference
"RFC 5246: The Transport Layer Security (TLS)
Protocol Version 1.2";
}
} // container trusted-ca-certs
container trusted-client-certs {
description
"A list of client certificates that a NETCONF server can
use to authenticate a NETCONF client's certificate. A
client's certificate is authenticated if it is an exact
match to one of the configured trusted client certificates.";
leaf-list trusted-client-cert {
type binary;
description
"The binary certificate structure, as
specified by RFC 5246, Section 7.4.6, i.e.,:
opaque ASN.1Cert<1..2^24>;
";
reference
"RFC 5246: The Transport Layer Security (TLS)
Protocol Version 1.2";
}
} // container trusted-client-certs
container cert-maps {
if-feature tls-map-certificates;
description
"The cert-maps container is used by a NETCONF server to
map the NETCONF client's presented X.509 certificate to
a NETCONF username.
If no matching and valid cert-to-name list entry can be
found, then the NETCONF server MUST close the connection,
and MUST NOT accept NETCONF messages over it.";
uses x509c2n:cert-to-name;
} // container cert-maps
container psk-maps {
if-feature tls-map-pre-shared-keys;
description
"During the TLS Handshake, the client indicates which
key to use by including a PSK identity in the TLS
ClientKeyExchange message. On the NETCONF server side,
this PSK identity is used to look up an entry in the psk-map
list. If such an entry is found, and the pre-shared keys
match, then the client is authenticated. The NETCONF
server uses the value from the user-name leaf in the
psk-map list as the NETCONF username. If the NETCONF
server cannot find an entry in the psk-map list, or if
the pre-shared keys do not match, then the NETCONF
server terminates the connection.";
reference
"RFC 4279: Pre-Shared Key Ciphersuites for Transport Layer
Security (TLS)";
list psk-map {
key "psk-identity";
leaf psk-identity {
type string;
description
"The PSK identity encoded as a UTF-8 string. For
details how certain common PSK identity formats can
be encoded in UTF-8, see section 5.1. of RFC 4279.";
reference
"RFC 4279: Pre-Shared Key Ciphersuites for Transport
Layer Security (TLS)";
}
leaf user-name {
type nacm:user-name-type;
mandatory true;
description
"The NETCONF username associated with this PSK
identity.";
}
leaf not-valid-before {
type yang:date-and-time;
description
"This PSK identity is not valid before the given date
and time.";
}
leaf not-valid-after {
type yang:date-and-time;
description
"This PSK identity is not valid after the given date
and time.";
}
leaf key {
// nacm:default-deny-all;
type yang:hex-string;
mandatory true;
description
"The key associated with the PSK identity";
reference
"RFC 4279: Pre-Shared Key Ciphersuites for Transport
Layer Security (TLS)";
}
} // list psk-map
} // container psk-maps
} // grouping tls-global-config
augment /sys:system/sys:authentication {
container tls {
uses tls-global-config;
} // container tls
}
} // module ietf-system-tls-auth

View File

@ -1,832 +0,0 @@
module ietf-system {
namespace "urn:ietf:params:xml:ns:yang:ietf-system";
prefix "sys";
import ietf-yang-types {
prefix yang;
}
import ietf-inet-types {
prefix inet;
}
import ietf-netconf-acm {
prefix nacm;
}
import iana-crypt-hash {
prefix ianach;
}
import msea-types {
prefix msea;
revision-date 2016-02-29;
}
organization
"IETF NETMOD (NETCONF Data Modeling Language) Working Group";
contact
"WG Web: <http://tools.ietf.org/wg/netmod/>
WG List: <mailto:netmod@ietf.org>
WG Chair: Thomas Nadeau
<mailto:tnadeau@lucidvision.com>
WG Chair: Juergen Schoenwaelder
<mailto:j.schoenwaelder@jacobs-university.de>
Editor: Andy Bierman
<mailto:andy@yumaworks.com>
Editor: Martin Bjorklund
<mailto:mbj@tail-f.com>";
description
"This module contains a collection of YANG definitions for the
configuration and identification of some common system
properties within a device containing a NETCONF server. This
includes data node definitions for system identification,
time-of-day management, user management, DNS resolver
configuration, and some protocol operations for system
management.
Copyright (c) 2014 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC 7317; see
the RFC itself for full legal notices.";
revision 2014-08-06 {
description
"Initial revision.";
reference
"RFC 7317: A YANG Data Model for System Management";
}
/*
* Typedefs
*/
typedef timezone-name {
type string;
description
"A time zone name as used by the Time Zone Database,
sometimes referred to as the 'Olson Database'.
The exact set of valid values is an implementation-specific
matter. Client discovery of the exact set of time zone names
for a particular server is out of scope.";
reference
"RFC 6557: Procedures for Maintaining the Time Zone Database";
}
/*
* Features
*/
feature radius {
description
"Indicates that the device can be configured as a RADIUS
client.";
reference
"RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
}
feature authentication {
description
"Indicates that the device supports configuration of
user authentication.";
}
feature local-users {
if-feature authentication;
description
"Indicates that the device supports configuration of
local user authentication.";
}
feature radius-authentication {
if-feature radius;
if-feature authentication;
description
"Indicates that the device supports configuration of user
authentication over RADIUS.";
reference
"RFC 2865: Remote Authentication Dial In User Service (RADIUS)
RFC 5607: Remote Authentication Dial-In User Service (RADIUS)
Authorization for Network Access Server (NAS)
Management";
}
feature ntp {
description
"Indicates that the device can be configured to use one or
more NTP servers to set the system date and time.";
}
feature ntp-udp-port {
if-feature ntp;
description
"Indicates that the device supports the configuration of
the UDP port for NTP servers.
This is a 'feature', since many implementations do not support
any port other than the default port.";
}
feature timezone-name {
description
"Indicates that the local time zone on the device
can be configured to use the TZ database
to set the time zone and manage daylight saving time.";
reference
"RFC 6557: Procedures for Maintaining the Time Zone Database";
}
feature dns-udp-tcp-port {
description
"Indicates that the device supports the configuration of
the UDP and TCP port for DNS servers.
This is a 'feature', since many implementations do not support
any port other than the default port.";
}
/*
* Identities
*/
identity authentication-method {
description
"Base identity for user authentication methods.";
}
identity radius {
base authentication-method;
description
"Indicates user authentication using RADIUS.";
reference
"RFC 2865: Remote Authentication Dial In User Service (RADIUS)
RFC 5607: Remote Authentication Dial-In User Service (RADIUS)
Authorization for Network Access Server (NAS)
Management";
}
identity local-users {
base authentication-method;
description
"Indicates password-based authentication of locally
configured users.";
}
identity radius-authentication-type {
description
"Base identity for RADIUS authentication types.";
}
identity radius-pap {
base radius-authentication-type;
description
"The device requests Password Authentication Protocol (PAP)
authentication from the RADIUS server.";
reference
"RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
}
identity radius-chap {
base radius-authentication-type;
description
"The device requests Challenge Handshake Authentication
Protocol (CHAP) authentication from the RADIUS server.";
reference
"RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
}
/*
* Configuration data nodes
*/
container system {
description
"System group configuration.";
leaf contact {
type string;
description
"The administrator contact information for the system.
A server implementation MAY map this leaf to the sysContact
MIB object. Such an implementation needs to use some
mechanism to handle the differences in size and characters
allowed between this leaf and sysContact. The definition of
such a mechanism is outside the scope of this document.";
reference
"RFC 3418: Management Information Base (MIB) for the
Simple Network Management Protocol (SNMP)
SNMPv2-MIB.sysContact";
}
leaf hostname {
type inet:domain-name;
description
"The name of the host. This name can be a single domain
label or the fully qualified domain name of the host.";
}
leaf location {
type string;
description
"The system location.
A server implementation MAY map this leaf to the sysLocation
MIB object. Such an implementation needs to use some
mechanism to handle the differences in size and characters
allowed between this leaf and sysLocation. The definition
of such a mechanism is outside the scope of this document.";
reference
"RFC 3418: Management Information Base (MIB) for the
Simple Network Management Protocol (SNMP)
SNMPv2-MIB.sysLocation";
}
container clock {
description
"Configuration of the system date and time properties.";
choice timezone {
description
"The system time zone information.";
case timezone-name {
if-feature timezone-name;
leaf timezone-name {
type timezone-name;
description
"The TZ database name to use for the system, such
as 'Europe/Stockholm'.";
}
}
case timezone-utc-offset {
leaf timezone-utc-offset {
type int16 {
range "-1500 .. 1500";
}
units "minutes";
description
"The number of minutes to add to UTC time to
identify the time zone for this system. For example,
'UTC - 8:00 hours' would be represented as '-480'.
Note that automatic daylight saving time adjustment
is not provided if this object is used.";
}
}
}
}
container ntp {
if-feature ntp;
presence
"Enables the NTP client unless the 'enabled' leaf
(which defaults to 'true') is set to 'false'";
description
"Configuration of the NTP client.";
leaf enabled {
type boolean;
default true;
description
"Indicates that the system should attempt to
synchronize the system clock with an NTP server
from the 'ntp/server' list.";
}
list server {
key name;
max-elements 3;
description
"List of NTP servers to use for system clock
synchronization. If '/system/ntp/enabled'
is 'true', then the system will attempt to
contact and utilize the specified NTP servers.
If DHCP retrieves NTP servers then these values
are used in addition to those";
leaf name {
type string;
description
"An arbitrary name for the NTP server.";
}
choice transport {
mandatory true;
description
"The transport-protocol-specific parameters for this
server.";
case udp {
container udp {
description
"Contains UDP-specific configuration parameters
for NTP.";
leaf address {
type inet:host;
mandatory true;
description
"The address of the NTP server.";
}
// leaf port {
// if-feature ntp-udp-port;
// type inet:port-number;
// default 123;
// description
// "The port number of the NTP server.";
// }
}
}
}
// leaf association-type { //These elements are omitted because MSEA1000 does not support these options
// type enumeration {
// enum server {
// description
// "Use client association mode. This device
// will not provide synchronization to the
// configured NTP server.";
// }
// enum peer {
// description
// "Use symmetric active association mode.
// This device may provide synchronization
// to the configured NTP server.";
// }
// enum pool {
// description
// "Use client association mode with one or
// more of the NTP servers found by DNS
// resolution of the domain name given by
// the 'address' leaf. This device will not
// provide synchronization to the servers.";
// }
// }
// default server;
// description
// "The desired association type for this NTP server.";
// }
// leaf iburst {
// type boolean;
// default false;
// description
// "Indicates whether this server should enable burst
// synchronization or not.";
// }
// leaf prefer {
// type boolean;
// default false;
// description
// "Indicates whether this server should be preferred
// or not.";
// }
}
}
container dns-resolver {
presence "If defined enables the DNS servers to be configured.";
description
"Configuration of the DNS resolver. If DHCP retrieves DNS
servers or search domains then these values are used in
addition to those";
leaf-list search {
type inet:domain-name;
max-elements 3;
ordered-by user;
description
"An ordered list of domains to search when resolving
a host name.";
}
list server {
key name;
max-elements 3;
ordered-by user;
description
"List of the DNS servers that the resolver should query.
When the resolver is invoked by a calling application, it
sends the query to the first name server in this list. If
no response has been received within 'timeout' seconds,
the resolver continues with the next server in the list.
If no response is received from any server, the resolver
continues with the first server again. When the resolver
has traversed the list 'attempts' times without receiving
any response, it gives up and returns an error to the
calling application.
Implementations MAY limit the number of entries in this
list.";
leaf name {
type string;
description
"An arbitrary name for the DNS server.";
}
choice transport {
mandatory true;
description
"The transport-protocol-specific parameters for this
server.";
case udp-and-tcp {
container udp-and-tcp {
description
"Contains UDP- and TCP-specific configuration
parameters for DNS.";
reference
"RFC 1035: Domain Names - Implementation and
Specification
RFC 5966: DNS Transport over TCP - Implementation
Requirements";
leaf address {
type inet:ip-address;
mandatory true;
description
"The address of the DNS server.";
}
// leaf port {
// if-feature dns-udp-tcp-port;
// type inet:port-number;
// default 53;
// description
// "The UDP and TCP port number of the DNS server.";
// }
}
}
}
}
// container options { //These elements are omitted because MSEA1000 does not support these options
// description
// "Resolver options. The set of available options has been
// limited to those that are generally available across
// different resolver implementations and generally useful.";
// leaf timeout {
// type uint8 {
// range "1..max";
// }
// units "seconds";
// default "5";
// description
// "The amount of time the resolver will wait for a
// response from each remote name server before
// retrying the query via a different name server.";
// }
// leaf attempts {
// type uint8 {
// range "1..max";
// }
// default "2";
// description
// "The number of times the resolver will send a query to
// all of its name servers before giving up and returning
// an error to the calling application.";
// }
// }
}
container radius {
if-feature radius;
description
"Configuration of the RADIUS client.";
list server {
key name;
ordered-by user;
description
"List of RADIUS servers used by the device.
When the RADIUS client is invoked by a calling
application, it sends the query to the first server in
this list. If no response has been received within
'timeout' seconds, the client continues with the next
server in the list. If no response is received from any
server, the client continues with the first server again.
When the client has traversed the list 'attempts' times
without receiving any response, it gives up and returns an
error to the calling application.";
leaf name {
type string;
description
"An arbitrary name for the RADIUS server.";
}
choice transport {
mandatory true;
description
"The transport-protocol-specific parameters for this
server.";
case udp {
container udp {
description
"Contains UDP-specific configuration parameters
for RADIUS.";
leaf address {
type inet:host;
mandatory true;
description
"The address of the RADIUS server.";
}
leaf authentication-port {
type inet:port-number;
default "1812";
description
"The port number of the RADIUS server.";
}
leaf shared-secret {
type string;
mandatory true;
// nacm:default-deny-all;
description
"The shared secret, which is known to both the
RADIUS client and server.";
reference
"RFC 2865: Remote Authentication Dial In User
Service (RADIUS)";
}
}
}
}
leaf authentication-type {
type identityref {
base radius-authentication-type;
}
default radius-pap;
description
"The authentication type requested from the RADIUS
server.";
}
}
container options {
description
"RADIUS client options.";
leaf timeout {
type uint8 {
range "1..max";
}
units "seconds";
default "5";
description
"The number of seconds the device will wait for a
response from each RADIUS server before trying with a
different server.";
}
leaf attempts {
type uint8 {
range "1..max";
}
default "2";
description
"The number of times the device will send a query to
all of its RADIUS servers before giving up.";
}
}
}
container authentication {
// nacm:default-deny-write;
if-feature authentication;
description
"The authentication configuration subtree.";
leaf-list user-authentication-order {
type identityref {
base authentication-method;
}
must '(. != "sys:radius" or ../../radius/server)' {
error-message
"When 'radius' is used, a RADIUS server"
+ " must be configured.";
description
"When 'radius' is used as an authentication method,
a RADIUS server must be configured.";
}
ordered-by user;
description
"When the device authenticates a user with a password,
it tries the authentication methods in this leaf-list in
order. If authentication with one method fails, the next
method is used. If no method succeeds, the user is
denied access.
An empty user-authentication-order leaf-list still allows
authentication of users using mechanisms that do not
involve a password.
If the 'radius-authentication' feature is advertised by
the NETCONF server, the 'radius' identity can be added to
this list.
If the 'local-users' feature is advertised by the
NETCONF server, the 'local-users' identity can be
added to this list.";
}
list user {
if-feature local-users;
key name;
description
"The list of local users configured on this device.";
leaf name {
type string;
description
"The user name string identifying this entry.";
must ".='netconf' or .='admin' or .='readonly'" {
error-message "The set of users is not changeable on this device. Must have admin, netconf and readonly";
error-app-tag "msea-sys-must-01";
}
}
leaf password {
type ianach:crypt-hash;
description
"The password for this entry.";
}
list authorized-key {
key name;
description
"A list of public SSH keys for this user. These keys
are allowed for SSH authentication, as described in
RFC 4253.";
reference
"RFC 4253: The Secure Shell (SSH) Transport Layer
Protocol";
leaf name {
type string;
description
"An arbitrary name for the SSH key.";
}
leaf algorithm {
type string;
mandatory true;
description
"The public key algorithm name for this SSH key.
Valid values are the values in the IANA 'Secure Shell
(SSH) Protocol Parameters' registry, Public Key
Algorithm Names.";
reference
"IANA 'Secure Shell (SSH) Protocol Parameters'
registry, Public Key Algorithm Names";
}
leaf key-data {
type binary;
mandatory true;
description
"The binary public key data for this SSH key, as
specified by RFC 4253, Section 6.6, i.e.:
string certificate or public key format
identifier
byte[n] key/certificate data.";
reference
"RFC 4253: The Secure Shell (SSH) Transport Layer
Protocol";
}
}
}
}
}
/*
* Operational state data nodes
*/
container system-state {
config false;
description
"System group operational state.";
container platform {
description
"Contains vendor-specific information for
identifying the system platform and operating system.";
reference
"IEEE Std 1003.1-2008 - sys/utsname.h";
leaf os-name {
type string;
description
"The name of the operating system in use -
for example, 'Linux'.";
reference
"IEEE Std 1003.1-2008 - utsname.sysname";
}
leaf os-release {
type string;
description
"The current release level of the operating
system in use. This string MAY indicate
the OS source code revision.";
reference
"IEEE Std 1003.1-2008 - utsname.release";
}
leaf os-version {
type string;
description
"The current version level of the operating
system in use. This string MAY indicate
the specific OS build date and target variant
information.";
reference
"IEEE Std 1003.1-2008 - utsname.version";
}
leaf machine {
type string;
description
"A vendor-specific identifier string representing
the hardware in use.";
reference
"IEEE Std 1003.1-2008 - utsname.machine";
}
}
container clock {
description
"Monitoring of the system date and time properties.";
leaf current-datetime {
type yang:date-and-time;
description
"The current system date and time.";
}
leaf boot-datetime {
type yang:date-and-time;
description
"The system date and time when the system last restarted.";
}
}
}
rpc set-current-datetime {
// nacm:default-deny-all;
description
"Set the /system-state/clock/current-datetime leaf
to the specified value.
If the system is using NTP (i.e., /system/ntp/enabled
is set to 'true'), then this operation will fail with
error-tag 'operation-failed' and error-app-tag value of
'ntp-active'.";
input {
leaf current-datetime {
type yang:date-and-time;
mandatory true;
description
"The current system date and time.";
}
}
}
rpc system-restart {
// nacm:default-deny-all;
description
"Request that the entire system be restarted immediately.
A server SHOULD send an rpc reply to the client before
restarting the system.";
input {
leaf reset-option {
type msea:reset-config-options;
description "Optionally specify a parameter that can be
used to reset the configuration on the device or
reset it to factory defaults";
}
}
}
rpc system-shutdown {
// nacm:default-deny-all;
description
"Request that the entire system be shut down immediately.
A server SHOULD send an rpc reply to the client before
shutting down the system.";
}
}

View File

@ -1,248 +0,0 @@
module ietf-x509-cert-to-name {
namespace "urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name";
prefix x509c2n;
import ietf-yang-types {
prefix yang;
}
organization "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
contact
"WG Web: <http://tools.ietf.org/wg/netmod/>
WG List: <mailto:netmod@ietf.org>
WG Chair: David Kessens
<mailto:david.kessens@nsn.com>
WG Chair: Juergen Schoenwaelder
<mailto:j.schoenwaelder@jacobs-university.de>
Editor: Martin Bjorklund
<mailto:mbj@tail-f.com>
Editor: Juergen Schoenwaelder
<mailto:j.schoenwaelder@jacobs-university.de>";
description
"This module contains a collection of YANG definitions for
extracting a name from a X.509 certificate.
The algorithm used to extract a name from a X.509 certificate
was first defined in RFC 6353.
Copyright (c) 2013 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices.";
reference
"RFC6353: Transport Layer Security (TLS) Transport Model for
the Simple Network Management Protocol (SNMP)";
revision 2013-03-26 {
description
"Initial revision.";
reference "RFC XXXX: A YANG Data Model for SNMP Configuration";
}
typedef tls-fingerprint {
type yang:hex-string {
pattern "([0-9a-fA-F]){2}(:([0-9a-fA-F]){2}){0,254}";
}
description
"A fingerprint value that can be used to uniquely reference
other data of potentially arbitrary length.
An tls-fingerprint value is composed of a 1-octet hashing
algorithm identifier followed by the fingerprint value. The
first octet value identifying the hashing algorithm is taken
from the IANA TLS HashAlgorithm Registry (RFC 5246). The
remaining octets are filled using the results of the hashing
algorithm.";
reference "SNMP-TLS-TM-MIB.SnmpTLSFingerprint";
}
identity cert-to-name {
description
"Base identity for algorithms to derive a name from a
certificate.";
}
identity specified {
base cert-to-name;
description
"Directly specifies the name to be used for the certificate.
The value of the leaf 'name' in 'cert-to-name' list is used.";
reference "SNMP-TLS-TM-MIB.snmpTlstmCertSpecified";
}
identity san-rfc822-name {
base cert-to-name;
description
"Maps a subjectAltName's rfc822Name to a name. The local part
of the rfc822Name is passed unaltered but the host-part of the
name must be passed in lowercase. This mapping results in a
1:1 correspondence between equivalent subjectAltName
rfc822Name values and name values except that the host-part
of the name MUST be passed in lowercase. For example, the
rfc822Name field FooBar@Example.COM is mapped to name
FooBar@example.com.";
reference "SNMP-TLS-TM-MIB.snmpTlstmCertSANRFC822Name";
}
identity san-dns-name {
base cert-to-name;
description
"Maps a subjectAltName's dNSName to a name after first
converting it to all lowercase (RFC 5280 does not specify
converting to lowercase so this involves an extra step).
This mapping results in a 1:1 correspondence between
subjectAltName dNSName values and the name values.";
reference "SNMP-TLS-TM-MIB.snmpTlstmCertSANDNSName";
}
identity san-ip-address {
base cert-to-name;
description
"Maps a subjectAltName's iPAddress to a name by
transforming the binary encoded address as follows:
1) for IPv4, the value is converted into a
decimal-dotted quad address (e.g., '192.0.2.1').
2) for IPv6 addresses, the value is converted into a
32-character all lowercase hexadecimal string
without any colon separators.
This mapping results in a 1:1 correspondence between
subjectAltName iPAddress values and the name values.";
reference "SNMP-TLS-TM-MIB.snmpTlstmCertSANIpAddress";
}
identity san-any {
base cert-to-name;
description
"Maps any of the following fields using the corresponding
mapping algorithms:
+------------+-----------------+
| Type | Algorithm |
|------------+-----------------|
| rfc822Name | san-rfc822-name |
| dNSName | san-dns-name |
| iPAddress | san-ip-address |
+------------+-----------------+
The first matching subjectAltName value found in the
certificate of the above types MUST be used when deriving
the name. The mapping algorithm specified in the
'Algorithm' column MUST be used to derive the name.
This mapping results in a 1:1 correspondence between
subjectAltName values and name values. The three sub-mapping
algorithms produced by this combined algorithm cannot produce
conflicting results between themselves.";
reference "SNMP-TLS-TM-MIB.snmpTlstmCertSANAny";
}
identity common-name {
base cert-to-name;
description
"Maps a certificate's CommonName to a name after converting
it to a UTF-8 encoding. The usage of CommonNames is
deprecated and users are encouraged to use subjectAltName
mapping methods instead. This mapping results in a 1:1
correspondence between certificate CommonName values and name
values.";
reference "SNMP-TLS-TM-MIB.snmpTlstmCertCommonName";
}
grouping cert-to-name {
description
"Defines nodes for mapping certificates to names. Modules
that uses this grouping should describe how the resulting
name is used.";
list cert-to-name {
key "id";
description
"This list defines how certificates are mapped to names.
The name is derived by considering each cert-to-name
list entry in order. The cert-to-name entry's fingerprint
determines whether the list entry is a match:
1) If the cert-to-name list entry's fingerprint value
matches that of the presented certificate, then consider
the list entry as a successful match.
2) If the cert-to-name list entry's fingerprint value
matches that of a locally held copy of a trusted CA
certificate, and that CA certificate was part of the CA
certificate chain to the presented certificate, then
consider the list entry as a successful match.
Once a matching cert-to-name list entry has been found, the
map-type is used to determine how the name associated with
the certificate should be determined. See the map-type
leaf's description for details on determining the name value.
If it is impossible to determine a name from the cert-to-name
list entry's data combined with the data presented in the
certificate, then additional cert-to-name list entries MUST
be searched looking for another potential match.
Security administrators are encouraged to make use of
certificates with subjectAltName fields that can be mapped to
names so that a single root CA certificate can allow all
child certificate's subjectAltName to map directly to a name
via a 1:1 transformation.";
reference "SNMP-TLS-TM-MIB.snmpTlstmCertToTSNEntry";
leaf id {
type uint32;
description
"The id specifies the order in which the entries in the
cert-to-name list are searched. Entries with lower
numbers are searched first.";
reference "SNMP-TLS-TM-MIB.snmpTlstmCertToTSNID";
}
leaf fingerprint {
type x509c2n:tls-fingerprint;
mandatory true;
description
"Specifies a value with which the fingerprint of the
certificate presented by the peer is compared. If the
fingerprint of the certificate presented by the peer does
not match the fingerprint configured, then the entry is
skipped and the search for a match continues.";
reference "SNMP-TLS-TM-MIB.snmpTlstmCertToTSNFingerprint";
}
leaf map-type {
type identityref {
base cert-to-name;
}
mandatory true;
description
"Specifies the algorithm used to map the certificate
presented by the peer to a name.
Mappings that need additional configuration objects should
use the 'when' statement to make them conditional based on
the 'map-type'.";
reference "SNMP-TLS-TM-MIB.snmpTlstmCertToTSNMapType";
}
leaf name {
when "../map-type = 'x509c2n:specified'";
type string;
mandatory true;
description
"Directly specifies the NETCONF username when the
'map-type' is 'specified'.";
reference "SNMP-TLS-TM-MIB.snmpTlstmCertToTSNData";
}
}
}
}

View File

@ -1,480 +0,0 @@
module ietf-yang-types {
namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
prefix "yang";
organization
"IETF NETMOD (NETCONF Data Modeling Language) Working Group";
contact
"WG Web: <http://tools.ietf.org/wg/netmod/>
WG List: <mailto:netmod@ietf.org>
WG Chair: David Kessens
<mailto:david.kessens@nsn.com>
WG Chair: Juergen Schoenwaelder
<mailto:j.schoenwaelder@jacobs-university.de>
Editor: Juergen Schoenwaelder
<mailto:j.schoenwaelder@jacobs-university.de>";
description
"This module contains a collection of generally useful derived
YANG data types.
Copyright (c) 2013 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC 6991; see
the RFC itself for full legal notices.";
revision 2013-07-15 {
description
"This revision adds the following new data types:
- yang-identifier
- hex-string
- uuid
- dotted-quad";
reference
"RFC 6991: Common YANG Data Types";
}
revision 2010-09-24 {
description
"Initial revision.";
reference
"RFC 6021: Common YANG Data Types";
}
/*** collection of counter and gauge types ***/
typedef counter32 {
type uint32;
description
"The counter32 type represents a non-negative integer
that monotonically increases until it reaches a
maximum value of 2^32-1 (4294967295 decimal), when it
wraps around and starts increasing again from zero.
Counters have no defined 'initial' value, and thus, a
single value of a counter has (in general) no information
content. Discontinuities in the monotonically increasing
value normally occur at re-initialization of the
management system, and at other times as specified in the
description of a schema node using this type. If such
other times can occur, for example, the creation of
a schema node of type counter32 at times other than
re-initialization, then a corresponding schema node
should be defined, with an appropriate type, to indicate
the last discontinuity.
The counter32 type should not be used for configuration
schema nodes. A default statement SHOULD NOT be used in
combination with the type counter32.
In the value set and its semantics, this type is equivalent
to the Counter32 type of the SMIv2.";
reference
"RFC 2578: Structure of Management Information Version 2
(SMIv2)";
}
typedef zero-based-counter32 {
type yang:counter32;
default "0";
description
"The zero-based-counter32 type represents a counter32
that has the defined 'initial' value zero.
A schema node of this type will be set to zero (0) on creation
and will thereafter increase monotonically until it reaches
a maximum value of 2^32-1 (4294967295 decimal), when it
wraps around and starts increasing again from zero.
Provided that an application discovers a new schema node
of this type within the minimum time to wrap, it can use the
'initial' value as a delta. It is important for a management
station to be aware of this minimum time and the actual time
between polls, and to discard data if the actual time is too
long or there is no defined minimum time.
In the value set and its semantics, this type is equivalent
to the ZeroBasedCounter32 textual convention of the SMIv2.";
reference
"RFC 4502: Remote Network Monitoring Management Information
Base Version 2";
}
typedef counter64 {
type uint64;
description
"The counter64 type represents a non-negative integer
that monotonically increases until it reaches a
maximum value of 2^64-1 (18446744073709551615 decimal),
when it wraps around and starts increasing again from zero.
Counters have no defined 'initial' value, and thus, a
single value of a counter has (in general) no information
content. Discontinuities in the monotonically increasing
value normally occur at re-initialization of the
management system, and at other times as specified in the
description of a schema node using this type. If such
other times can occur, for example, the creation of
a schema node of type counter64 at times other than
re-initialization, then a corresponding schema node
should be defined, with an appropriate type, to indicate
the last discontinuity.
The counter64 type should not be used for configuration
schema nodes. A default statement SHOULD NOT be used in
combination with the type counter64.
In the value set and its semantics, this type is equivalent
to the Counter64 type of the SMIv2.";
reference
"RFC 2578: Structure of Management Information Version 2
(SMIv2)";
}
typedef zero-based-counter64 {
type yang:counter64;
default "0";
description
"The zero-based-counter64 type represents a counter64 that
has the defined 'initial' value zero.
A schema node of this type will be set to zero (0) on creation
and will thereafter increase monotonically until it reaches
a maximum value of 2^64-1 (18446744073709551615 decimal),
when it wraps around and starts increasing again from zero.
Provided that an application discovers a new schema node
of this type within the minimum time to wrap, it can use the
'initial' value as a delta. It is important for a management
station to be aware of this minimum time and the actual time
between polls, and to discard data if the actual time is too
long or there is no defined minimum time.
In the value set and its semantics, this type is equivalent
to the ZeroBasedCounter64 textual convention of the SMIv2.";
reference
"RFC 2856: Textual Conventions for Additional High Capacity
Data Types";
}
typedef gauge32 {
type uint32;
description
"The gauge32 type represents a non-negative integer, which
may increase or decrease, but shall never exceed a maximum
value, nor fall below a minimum value. The maximum value
cannot be greater than 2^32-1 (4294967295 decimal), and
the minimum value cannot be smaller than 0. The value of
a gauge32 has its maximum value whenever the information
being modeled is greater than or equal to its maximum
value, and has its minimum value whenever the information
being modeled is smaller than or equal to its minimum value.
If the information being modeled subsequently decreases
below (increases above) the maximum (minimum) value, the
gauge32 also decreases (increases).
In the value set and its semantics, this type is equivalent
to the Gauge32 type of the SMIv2.";
reference
"RFC 2578: Structure of Management Information Version 2
(SMIv2)";
}
typedef gauge64 {
type uint64;
description
"The gauge64 type represents a non-negative integer, which
may increase or decrease, but shall never exceed a maximum
value, nor fall below a minimum value. The maximum value
cannot be greater than 2^64-1 (18446744073709551615), and
the minimum value cannot be smaller than 0. The value of
a gauge64 has its maximum value whenever the information
being modeled is greater than or equal to its maximum
value, and has its minimum value whenever the information
being modeled is smaller than or equal to its minimum value.
If the information being modeled subsequently decreases
below (increases above) the maximum (minimum) value, the
gauge64 also decreases (increases).
In the value set and its semantics, this type is equivalent
to the CounterBasedGauge64 SMIv2 textual convention defined
in RFC 2856";
reference
"RFC 2856: Textual Conventions for Additional High Capacity
Data Types";
}
/*** collection of identifier-related types ***/
typedef object-identifier {
type string {
pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
+ '(\.(0|([1-9]\d*)))*';
}
description
"The object-identifier type represents administratively
assigned names in a registration-hierarchical-name tree.
Values of this type are denoted as a sequence of numerical
non-negative sub-identifier values. Each sub-identifier
value MUST NOT exceed 2^32-1 (4294967295). Sub-identifiers
are separated by single dots and without any intermediate
whitespace.
The ASN.1 standard restricts the value space of the first
sub-identifier to 0, 1, or 2. Furthermore, the value space
of the second sub-identifier is restricted to the range
0 to 39 if the first sub-identifier is 0 or 1. Finally,
the ASN.1 standard requires that an object identifier
has always at least two sub-identifiers. The pattern
captures these restrictions.
Although the number of sub-identifiers is not limited,
module designers should realize that there may be
implementations that stick with the SMIv2 limit of 128
sub-identifiers.
This type is a superset of the SMIv2 OBJECT IDENTIFIER type
since it is not restricted to 128 sub-identifiers. Hence,
this type SHOULD NOT be used to represent the SMIv2 OBJECT
IDENTIFIER type; the object-identifier-128 type SHOULD be
used instead.";
reference
"ISO9834-1: Information technology -- Open Systems
Interconnection -- Procedures for the operation of OSI
Registration Authorities: General procedures and top
arcs of the ASN.1 Object Identifier tree";
}
typedef object-identifier-128 {
type object-identifier {
pattern '\d*(\.\d*){1,127}';
}
description
"This type represents object-identifiers restricted to 128
sub-identifiers.
In the value set and its semantics, this type is equivalent
to the OBJECT IDENTIFIER type of the SMIv2.";
reference
"RFC 2578: Structure of Management Information Version 2
(SMIv2)";
}
typedef yang-identifier {
type string {
length "1..max";
pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
}
description
"A YANG identifier string as defined by the 'identifier'
rule in Section 12 of RFC 6020. An identifier must
start with an alphabetic character or an underscore
followed by an arbitrary sequence of alphabetic or
numeric characters, underscores, hyphens, or dots.
A YANG identifier MUST NOT start with any possible
combination of the lowercase or uppercase character
sequence 'xml'.";
reference
"RFC 6020: YANG - A Data Modeling Language for the Network
Configuration Protocol (NETCONF)";
}
/*** collection of types related to date and time***/
typedef date-and-time {
type string {
pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
+ '(Z|[\+\-]\d{2}:\d{2})';
}
description
"The date-and-time type is a profile of the ISO 8601
standard for representation of dates and times using the
Gregorian calendar. The profile is defined by the
date-time production in Section 5.6 of RFC 3339.
The date-and-time type is compatible with the dateTime XML
schema type with the following notable exceptions:
(a) The date-and-time type does not allow negative years.
(b) The date-and-time time-offset -00:00 indicates an unknown
time zone (see RFC 3339) while -00:00 and +00:00 and Z
all represent the same time zone in dateTime.
(c) The canonical format (see below) of data-and-time values
differs from the canonical format used by the dateTime XML
schema type, which requires all times to be in UTC using
the time-offset 'Z'.
This type is not equivalent to the DateAndTime textual
convention of the SMIv2 since RFC 3339 uses a different
separator between full-date and full-time and provides
higher resolution of time-secfrac.
The canonical format for date-and-time values with a known time
zone uses a numeric time zone offset that is calculated using
the device's configured known offset to UTC time. A change of
the device's offset to UTC time will cause date-and-time values
to change accordingly. Such changes might happen periodically
in case a server follows automatically daylight saving time
(DST) time zone offset changes. The canonical format for
date-and-time values with an unknown time zone (usually
referring to the notion of local time) uses the time-offset
-00:00.";
reference
"RFC 3339: Date and Time on the Internet: Timestamps
RFC 2579: Textual Conventions for SMIv2
XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
}
typedef timeticks {
type uint32;
description
"The timeticks type represents a non-negative integer that
represents the time, modulo 2^32 (4294967296 decimal), in
hundredths of a second between two epochs. When a schema
node is defined that uses this type, the description of
the schema node identifies both of the reference epochs.
In the value set and its semantics, this type is equivalent
to the TimeTicks type of the SMIv2.";
reference
"RFC 2578: Structure of Management Information Version 2
(SMIv2)";
}
typedef timestamp {
type yang:timeticks;
description
"The timestamp type represents the value of an associated
timeticks schema node at which a specific occurrence
happened. The specific occurrence must be defined in the
description of any schema node defined using this type. When
the specific occurrence occurred prior to the last time the
associated timeticks attribute was zero, then the timestamp
value is zero. Note that this requires all timestamp values
to be reset to zero when the value of the associated timeticks
attribute reaches 497+ days and wraps around to zero.
The associated timeticks schema node must be specified
in the description of any schema node using this type.
In the value set and its semantics, this type is equivalent
to the TimeStamp textual convention of the SMIv2.";
reference
"RFC 2579: Textual Conventions for SMIv2";
}
/*** collection of generic address types ***/
typedef phys-address {
type string {
pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
}
description
"Represents media- or physical-level addresses represented
as a sequence octets, each octet represented by two hexadecimal
numbers. Octets are separated by colons. The canonical
representation uses lowercase characters.
In the value set and its semantics, this type is equivalent
to the PhysAddress textual convention of the SMIv2.";
reference
"RFC 2579: Textual Conventions for SMIv2";
}
typedef mac-address {
type string {
pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
}
description
"The mac-address type represents an IEEE 802 MAC address.
The canonical representation uses lowercase characters.
In the value set and its semantics, this type is equivalent
to the MacAddress textual convention of the SMIv2.";
reference
"IEEE 802: IEEE Standard for Local and Metropolitan Area
Networks: Overview and Architecture
RFC 2579: Textual Conventions for SMIv2";
}
/*** collection of XML-specific types ***/
typedef xpath1.0 {
type string;
description
"This type represents an XPATH 1.0 expression.
When a schema node is defined that uses this type, the
description of the schema node MUST specify the XPath
context in which the XPath expression is evaluated.";
reference
"XPATH: XML Path Language (XPath) Version 1.0";
}
/*** collection of string types ***/
typedef hex-string {
type string {
pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
}
description
"A hexadecimal string with octets represented as hex digits
separated by colons. The canonical representation uses
lowercase characters.";
}
typedef uuid {
type string {
pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
+ '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
}
description
"A Universally Unique IDentifier in the string representation
defined in RFC 4122. The canonical representation uses
lowercase characters.
The following is an example of a UUID in string representation:
f81d4fae-7dec-11d0-a765-00a0c91e6bf6
";
reference
"RFC 4122: A Universally Unique IDentifier (UUID) URN
Namespace";
}
typedef dotted-quad {
type string {
pattern
'(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+ '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
}
description
"An unsigned 32-bit number expressed in the dotted-quad
notation, i.e., four octets written as decimal numbers
and separated with the '.' (full stop) character.";
}
}

View File

@ -1,95 +0,0 @@
module nc-notifications {
namespace "urn:ietf:params:xml:ns:netmod:notification";
prefix "manageEvent";
import ietf-yang-types{ prefix yang; }
import notifications { prefix ncEvent; }
organization
"IETF NETCONF WG";
contact
"netconf@ietf.org";
description
"Conversion of the 'manageEvent' XSD in the NETCONF
Notifications RFC.";
reference
"RFC 5277";
revision 2008-07-14 {
description "RFC 5277 version.";
}
container netconf {
description "Top-level element in the notification namespace";
config false;
container streams {
description
"The list of event streams supported by the system. When
a query is issued, the returned set of streams is
determined based on user privileges.";
list stream {
description
"Stream name, description and other information.";
key name;
min-elements 1;
leaf name {
description
"The name of the event stream. If this is the default
NETCONF stream, this must have the value 'NETCONF'.";
type ncEvent:streamNameType;
}
leaf description {
description
"A description of the event stream, including such
information as the type of events that are sent over
this stream.";
type string;
mandatory true;
}
leaf replaySupport {
description
"A description of the event stream, including such
information as the type of events that are sent over
this stream.";
type boolean;
mandatory true;
}
leaf replayLogCreationTime {
description
"The timestamp of the creation of the log used to support
the replay function on this stream. Note that this might
be earlier then the earliest available notification in
the log. This object is updated if the log resets for
some reason. This object MUST be present if replay is
supported.";
type yang:date-and-time; // xsd:dateTime is wrong!
}
}
}
}
notification replayComplete {
description
"This notification is sent to signal the end of a replay
portion of a subscription.";
}
notification notificationComplete {
description
"This notification is sent to signal the end of a notification
subscription. It is sent in the case that stopTime was
specified during the creation of the subscription..";
}
}

View File

@ -1,72 +0,0 @@
module netopeer-cfgnetopeer {
namespace "urn:cesnet:tmc:netopeer:1.0";
prefix cfgnetopeer;
organization "CESNET, z.s.p.o.";
contact
"dkupka@cesnet.cz";
description
"Module specifying Netopeer module data model and RPC operation.";
revision 2013-02-14 {
description
"Modules are now configurable. Except implemented-rpcs which depends on module data model.";
}
revision 2012-11-13 {
description
"Removed parts implemented by library (RFC6022).";
}
revision 2011-10-20 {
description
"Initial revision";
}
container netopeer {
container modules {
list module {
key "name";
leaf name {
type string;
description
"Name of module";
}
leaf enabled {
type boolean;
default false;
description
"Specify whether or not the module is allowed to be managed over server.";
}
}
}
}
rpc netopeer-reboot {
description
"Operation allowing privileged user to restart netopeer-server.";
input {
leaf type {
type enumeration {
enum "soft";
enum "hard";
}
default "soft";
description
"Soft restart only unplugs all device modules and reloads configuration.
Hard restart also abort all connections and reload the binary.";
}
}
}
rpc reload-module {
description
"Unload and load any loaded module." ;
input {
leaf module {
type leafref {
path "/netopeer/modules/module/name";
}
mandatory true;
description
"Name of module to reload.";
}
}
}
}

View File

@ -1,95 +0,0 @@
module notifications {
namespace "urn:ietf:params:xml:ns:netconf:notification:1.0";
prefix "ncEvent";
import ietf-yang-types { prefix yang; }
organization
"IETF NETCONF WG";
contact
"netconf@ops.ietf.org";
description
"Conversion of the 'ncEvent' XSD in the
NETCONF Notifications RFC.";
reference
"RFC 5277.";
revision 2008-07-14 {
description "RFC 5277 version.";
}
typedef streamNameType {
description
"The name of an event stream.";
type string;
}
rpc create-subscription {
description
"The command to create a notification subscription. It
takes as argument the name of the notification stream
and filter. Both of those options limit the content of
the subscription. In addition, there are two time-related
parameters, startTime and stopTime, which can be used to
select the time interval of interest to the notification
replay feature.";
input {
leaf stream {
description
"An optional parameter that indicates which stream of events
is of interest. If not present, then events in the default
NETCONF stream will be sent.";
type streamNameType;
default "NETCONF";
}
anyxml filter {
description
"An optional parameter that indicates which subset of all
possible events is of interest. The format of this
parameter is the same as that of the filter parameter
in the NETCONF protocol operations. If not present,
all events not precluded by other parameters will
be sent.";
}
leaf startTime {
description
"A parameter used to trigger the replay feature and
indicates that the replay should start at the time
specified. If start time is not present, this is not a
replay subscription.";
type yang:date-and-time;
}
leaf stopTime {
// must ". >= ../startTime";
description
"An optional parameter used with the optional replay
feature to indicate the newest notifications of
interest. If stop time is not present, the notifications
will continue until the subscription is terminated.
Must be used with startTime.";
type yang:date-and-time;
}
}
}
container notification {
description "internal struct to start a notification";
config false;
leaf eventTime {
mandatory true;
type yang:date-and-time;
}
// eventType and any data content goes here
}
}

View File

@ -1,509 +0,0 @@
module rfc-2544 {
/*** NAMESPACE / PREFIX DEFINITION ***/
namespace "http://www.microsemi.com/rfc2544";
prefix "rfc2544";
import svc-activation-types {
prefix sa;
}
import msea-types {
prefix msea;
revision-date 2016-02-29;
}
/*** META INFORMATION ***/
organization
"Microsemi Inc., FTD Division";
contact
"Web URL: http://www.microsemi.com/
E-mail: info@microsemi.com
Postal: Microsemi Corporation Corporate Headquarters
One Enterprise Aliso Viejo,
CA 92656
U.S.A.
Phone: +1 949 380 6100
Fax: +1 949 215-4996";
description
"This YANG module defines the interface for RFC 2544 Benchmarking Methodology for Network Interconnect Devices
Copyright 2015 Microsemi Inc.
All rights reserved.";
revision "2015-10-20" {
description
"Initial version - Sean Condon, Microsemi";
}
/*
* Typedefs
*/
/*
* Groupings
*/
grouping frame-size-group {
description "Frame sizes to use in the test";
leaf-list frame-size {
type sa:frame-size-type;
max-elements 8;
units "byte";
ordered-by user;
description "A range of frame sizes to use. 512 bytes will be used if nothing is specified";
}
reference "RFC 2544 Section 9
All of the described tests SHOULD be performed at a number of frame
sizes. Specifically, the sizes SHOULD include the maximum and minimum
legitimate sizes for the protocol under test on the media under test
and enough sizes in between to be able to get a full characterization
of the DUT performance. Except where noted, at least five frame
sizes SHOULD be tested for each test condition.";
}
grouping throughput-group {
description
"Configuration parameters for throughput test.";
leaf step-size {
type uint8 {
range 1..10|20|25|30|40|50|100;
}
must "current() <= ((../max-rate) - (../min-rate))" {
error-app-tag "msea-2544-must-1";
error-message "step-size must be less than or equal to the difference between min- and max-rate";
}
units "Mb/s";
default 10;
description "The throughput rate step size from 1Mb/s to 1,000Mb/s (1 Gbps)";
}
leaf min-rate {
type uint16 {
range 1..999;
}
must "current() < ../max-rate" {
error-app-tag "msea-2544-must-2";
error-message "min-rate must not equal or exceed max-rate";
}
units "Mb/s";
default 10;
description "The minimum throughput rate from 1Mb/s to 1,000Mb/s (1Gbps)
The test starts at the max-rate and reduces by step-size on each
iteration until it drops below min-rate. For example with
max-rate=10, step-size=2 and min-rate=1, tests will be
performed at 10,8,6,4 and 2 Mb/s";
}
leaf max-rate {
type uint16 {
range 2..1000;
}
units "Mb/s";
default 1000;
description "The maximum throughput rate from 1Mb/s to 1,000Mb/s (1Gbps)";
}
leaf trial-duration {
type uint32 {
range 1..max;
}
default 60;
units "s";
description "Trial duration";
reference "RFC 2544 Section 24
The duration of the test portion of each trial SHOULD be
at least 60 seconds.";
}
}
grouping afl-group {
description
"Extra configuration parameters for throughput and latency test.";
leaf accepted-frame-loss {
type uint32 {
range min..100000;
}
units "m%";
default 0;
description "The acceptable Frame Loss ratio in units of 0.001%";
}
}
grouping result-common-group {
description
"Common attributes of by-frame-size result set.";
leaf test-status {
type sa:test-status;
mandatory true;
description "The current status of the subset of tests";
}
leaf frame-size {
type sa:frame-size-type;
units "bytes";
description "The frame size used";
}
leaf elapsed-time {
type uint16;
units "s";
description "The number of seconds the test has been running";
}
}
/*
* Features
*/
feature throughput {
description
"This feature indicates that the device supports throughput tests";
reference
"RFC 2544: Section 26.1";
}
feature latency {
description
"This feature indicates that the device supports Latency tests";
reference
"RFC 2544: Section 26.2";
}
feature frame-loss-rate {
description
"This feature indicates that the device supports Frame Loss Rate tests";
reference
"RFC 2544: Section 26.3";
}
feature back-to-back {
description
"This feature indicates that the device supports Back-to-Back (burst mode) tests";
reference
"RFC 2544: Section 26.4";
}
container rfc2544-test {
description
"A configured set of parameters for an RFC 2544 test";
container mep-config {
presence "Presence indicates that a MEP has been configured";
uses msea:mep-config-attribs-noref;
leaf remote-mep-id {
type msea:mep-id-type;
must "current()/../maintenance-association-end-point != current()" {
error-message "Remote MEP Id must not be the same as Local MEP Id";
error-app-tag "msea-svc-must-01";
}
//mandatory true; //Should not be mandatory in a top level container
description "The Id of the remote MEP";
}
container overwrite-pcp {
presence "Enables PCP Overwrite";
description "If present allows attributes to be
specified for the PCP overwrite";
uses sa:overwrite-pcp-attribs;
leaf overwrite-drop-eligible {
type boolean;
default false;
description
"The Drop Eligible flag in the MEP's TAG is replaced
with this value if overwrite-pcp is present.";
}
}
}
leaf binary-search-step-duration {
type uint16 {
range 1..10;
}
default 2;
units "s";
description
"The time in seconds for each step in the Throughput binary search. Range 1 to 10, default 2.";
reference "RFC 2544 Section 24";
}
container throughput {
if-feature throughput;
description "Configuration parameters for the Throughput part of the test";
uses throughput-group;
uses frame-size-group;
uses afl-group;
}
container latency {
if-feature latency;
description "Configuration parameters for the Latency part of the test";
uses throughput-group {
refine trial-duration {
default 120;
}
}
uses frame-size-group;
uses afl-group;
}
container frame-loss {
if-feature frame-loss-rate;
description "Configuration parameters for the Frame Loss part of the test";
uses throughput-group;
uses frame-size-group;
}
container back-to-back {
if-feature back-to-back;
description "Configuration parameters for the Back-to-Back part of the test";
leaf trial-duration {
type uint32 {
range 1..10000;
}
units "ms";
default 2000;
description "The duration of the Back-to-Back test in milliseconds";
}
leaf iterations {
type uint16 {
range 1..max;
}
default 50;
description "The number of times to run the test";
}
uses frame-size-group;
}
}
container rfc2544-result {
config false;
description "A collection of the results from the RFC 2544 tests";
container throughput {
if-feature throughput;
description "Results for the Throughput test";
uses sa:results-header-group;
list result-item {
key frame-size;
description "The list of results by frame size";
reference "RFC 2544: Section 26.1";
uses result-common-group;
leaf frame-rate {
type uint32;
units "Mb/s";
description "The throughput rate achieved for this packet size";
}
}
}
container latency {
if-feature latency;
description "Results for the Latency test";
uses sa:results-header-group;
list result-item {
key frame-size;
uses result-common-group;
leaf frame-rate {
type uint32;
units "Mb/s";
description "The throughput rate achieved for this frame size";
}
leaf frame-delay-min {
type uint32;
units "μs";
description "The Minimum Frame Delay measured at the throughput rate";
}
leaf frame-delay-max {
type uint32;
units "μs";
description "The Maximum Frame Delay measured at the throughput rate";
}
leaf frame-delay-avg {
type uint32;
units "μs";
description "The Average Frame Delay measured at the throughput rate";
}
leaf frame-delay-var-min {
type uint32;
units "μs";
description "The Minimum Frame Delay Variation measured at the throughput rate";
}
leaf frame-delay-var-max {
type uint32;
units "μs";
description "The Maximum Frame Delay Variation measured at the throughput rate";
}
leaf frame-delay-var-avg {
type uint32;
units "μs";
description "The Average Frame Delay Variation measured at the throughput rate";
}
}
}
container frame-loss {
if-feature frame-loss-rate;
description "Results for the Frame Loss test";
reference "RFC-2544 Section 26.3";
uses sa:results-header-group;
list result-item {
key frame-size;
description "The frame-loss result set for this frame-size";
uses result-common-group;
leaf frame-steps {
type uint8;
description "The number of steps recorded during Frame Loss test. Maximum is 8";
}
list frame-rate {
key rate;
description "A list of the losses at each rate step. This shows up to the 8 most recent steps";
leaf rate {
type uint32;
units "Mb/s";
description "The test rate used for this step";
}
leaf frame-loss {
type uint32;
units "m%";
description "The percentage frames lost for this rate step (in 0.001% units)";
}
}
}
}
container back-to-back {
if-feature back-to-back;
description "Results for the Back-to-Back (burst mode) test";
uses sa:results-header-group;
list result-item {
key frame-size;
leaf test-status {
type sa:test-status;
mandatory true;
description "The current status of the subset of tests";
}
leaf frame-size {
type sa:frame-size-type;
units "bytes";
description "The frame size used";
}
leaf burst-duration {
type uint16;
units "ms";
description "The duration of the burst in milliseconds";
}
leaf average-burst-frame-count {
type uint32;
description "An average of the count of received frames for the test for this frame size";
}
}
}
}
rpc run-rfc2544-test {
description
"Run the configured RFC 2544 test";
input {
leaf tests-enabled {
type bits {
bit throughput;
bit latency;
bit frameLoss;
bit backToBack;
}
default "throughput latency frameLoss backToBack";
description "Choose the test components to run - by default all are selected";
}
leaf send-subtest-event {
type boolean;
default true;
description "If true then send events for all of the state changes of tests at the 'frame size' level.
If false events are sent only for state changes in the top level tests e.g. throughput";
}
}
}
rpc stop-rfc2544-test {
description
"Stop the running RFC 2544 test";
}
notification rfc2544-test-updated {
description
"A rfc2544-test-updated notification is sent when the state of a test changes.";
uses sa:notification-group;
leaf frame-size {
type sa:frame-size-type;
units "bytes";
description "The frame size that is being tested. If not present then
the notification pertains to the overall test type";
}
}
}

View File

@ -1,190 +0,0 @@
module svc-activation-types {
/*** NAMESPACE / PREFIX DEFINITION ***/
namespace "http://www.microsemi.com/svc-activation-types";
prefix "sa";
import ietf-yang-types {
prefix yang;
revision-date 2013-07-15;
}
import msea-types {
prefix msea;
revision-date 2016-02-29;
}
import msea-cfm {
prefix msea-cfm;
revision-date 2016-02-29;
}
/*** META INFORMATION ***/
organization
"Microsemi Inc., FTD Division";
contact
"Web URL: http://www.microsemi.com/
E-mail: info@microsemi.com
Postal: Microsemi Corporation Corporate Headquarters
One Enterprise Aliso Viejo,
CA 92656
U.S.A.
Phone: +1 949 380 6100
Fax: +1 949 215-4996";
description
"This YANG module defines common types that
are used in both RFC 2544 and ITU-T Y.1564
Copyright 2015 Microsemi Inc.
All rights reserved.";
revision "2015-10-27" {
description
"Initial version - Sean Condon, Microsemi";
reference "Initial revision";
}
/*
* Typedefs
*/
typedef test-status {
type enumeration {
enum disabled {
value 0;
description "Test is disabled";
}
enum running {
value 1;
description "Test is running";
}
enum pending {
value 2;
description "Test is pending";
}
enum stopped {
value 3;
description "Test is stopped";
}
enum completed {
value 4;
description "Test is completed";
}
enum failed {
value 5;
description "Test is failed";
}
}
description "Enumerated values for the status of a test";
}
typedef frame-size-type {
type uint16 {
range 64..9600;
}
description "Frame size in bytes data type";
}
grouping mep-config-attribs {
description
"Attributes related to the configuration of a MEP";
leaf maintenance-domain {
type leafref {
path "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:id";
// msea:xref-module "msea-cfm";
}
description
"A reference to a specific Maintenance Domain.";
}
leaf maintenance-association {
type leafref {
path "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id=current()/../maintenance-domain]/msea-cfm:maintenance-association/msea-cfm:id";
// msea:xref-module "msea-cfm";
}
description
"A reference to a specific Maintenance Association.";
}
leaf maintenance-association-end-point {
type leafref {
path "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id=current()/../maintenance-domain]/msea-cfm:maintenance-association[msea-cfm:id=current()/../maintenance-association]/msea-cfm:maintenance-association-end-point/msea-cfm:mep-identifier";
// msea:xref-module "msea-cfm";
}
description
"A reference to a specific Maintenance association End Point.";
}
leaf remote-mep-id {
type leafref {
path "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id=current()/../maintenance-domain]/msea-cfm:maintenance-association[msea-cfm:id=current()/../maintenance-association]/msea-cfm:remote-meps";
// msea:xref-module "msea-cfm";
}
must "current()/../maintenance-association-end-point != current()" {
error-message "Remote MEP Id must not be the same as Local MEP Id";
error-app-tag "msea-svc-must-01";
}
//mandatory true; //Should not be mandatory in a top level container
description "The Id of the remote MEP";
}
}
grouping overwrite-pcp-attribs {
leaf overwrite-priority {
type msea:priority-type;
default 0;
description
"The priority in the MEP's TAG is replaced
with this priority if overwrite-pcp is present";
}
}
grouping results-header-group {
description
"Common attributes of a result set.";
leaf start-time {
type yang:date-and-time;
mandatory true;
description "Time at which the test was started.";
}
leaf end-time {
type yang:date-and-time;
description "Time at which the test ended.
Not specified if test has ended.";
}
leaf test-status {
type test-status;
mandatory true;
description "The status of the test";
}
}
grouping notification-group {
description "Attributes related to notifications";
leaf new-status {
type sa:test-status;
mandatory true;
description "The new status of the test";
}
leaf old-status {
type sa:test-status;
description "The old status of the test";
}
leaf test-type {
type string;
mandatory true;
description "Name of the test currently being performed";
}
}
}

View File

@ -1,667 +0,0 @@
module y-1564 {
/*** NAMESPACE / PREFIX DEFINITION ***/
namespace "http://www.microsemi.com/y1564";
prefix "y1564";
import svc-activation-types {
prefix sa;
}
import msea-types {
prefix msea;
revision-date 2016-02-29;
}
/*** META INFORMATION ***/
organization
"Microsemi Inc., FTD Division";
contact
"Web URL: http://www.microsemi.com/
E-mail: info@microsemi.com
Postal: Microsemi Corporation Corporate Headquarters
One Enterprise Aliso Viejo,
CA 92656
U.S.A.
Phone: +1 949 380 6100
Fax: +1 949 215-4996";
description
"This YANG module defines the interface for Rec. ITU-T Y.1564
(03/2011) Ethernet service activation test methodology
Copyright 2015 Microsemi Inc.
All rights reserved.";
revision "2015-10-29" {
description
"Initial version - Sean Condon, Microsemi
This version does not cover frame reordering (Section 7.2.5)";
reference "Initial implementation";
}
/*
* Typedefs
*/
/*
* Groupings
*/
grouping service-attributes-group {
description
"Attributes for service definition";
leaf service-id {
type uint8 {
range 1..8;
}
mandatory true;
description "The unique ID of the Service";
}
}
grouping result-attributes-group {
description "Common attributes in result";
leaf status {
type sa:test-status;
mandatory true;
description "Status of the test - Values are disabled,
running, pending, stopped, completed or failed";
}
}
grouping pass-fail-group {
leaf passed {
type boolean;
description
"Flag that indicates whether the test component
sucessfully met the test criteria.";
}
leaf fail-reason {
type enumeration {
enum notFailed {
value 0;
description "Test did not fail";
}
enum zeroTxCount {
value 1;
description "The test resulted in no transmitted packets";
}
enum zeroRxCount {
value 2;
description "No packets were received";
}
enum exceedFdvThreshold {
value 3;
description "The measured maximum Frame Delay Variation value exceeded the allowable threshold";
}
enum exceedFtdThreshold {
value 4;
description "The measured maximum Frame Transfer Delay value exceeded the allowable threshold";
}
enum exceedLossThreshold {
value 5;
description "The measured Frame Loss value exceeded the allowable threshold";
}
enum exceedAvailThreshold {
value 6;
description "The measured maximum Availability value exceeded the allowable threshold";
}
enum irAvgTooHigh {
value 7;
description "The measured Information Rate is above the maximum allowable rate";
}
enum irAvgTooLow {
value 8;
description "The measured Information Rate is below the maximum allowable rate";
}
enum targetUnknown {
value 9;
description "The MAC address of the target MEP was not known";
}
}
}
}
grouping y1564-test-result-group {
description "Common attributes in test result";
leaf tf {
type uint64;
description
"Count of the frames transmitted during the test period.";
}
leaf rf {
type uint64;
description
"Count of the frames received during the test period.";
}
leaf fl {
type uint64;
description
"Count of the frames lost during the test period.";
}
leaf flr {
type uint32;
units "m%";
description "The Frame Loss Ratio achieved. Units are 0.001%";
}
leaf elapsed {
type uint16;
units "s";
description
"The number of number of seconds the test has been running";
}
leaf fs {
type uint16;
units byte;
description "The Frame Size for which these results apply";
}
leaf ulr-min {
type uint32;
units "bit/s";
description "The minimum Utilised Line Rate achieved";
}
leaf ulr-max {
type uint32;
units "bit/s";
description "The maximum Utilised Line Rate achieved";
}
leaf ulr-avg {
type uint32;
units "bit/s";
description "The average Utilised Line Rate achieved";
}
leaf ulr-meas {
type uint32;
units "bit/s";
description
"The instantaneous Utilised Line Rate measured
at the time of this result set";
}
leaf ftd-min {
type uint32;
units "μs";
description "The minimum Frame Transfer Delay achieved";
}
leaf ftd-max {
type uint32;
units "μs";
description "The maximum Frame Transfer Delay achieved";
}
leaf ftd-avg {
type uint32;
units "μs";
description "The average Frame Transfer Delay achieved";
}
leaf ftd-meas {
type uint32;
units "μs";
description
"The instantaneous Frame Transfer Delay
measured at the time of this result set";
}
leaf fdv-min {
type uint32;
units "μs";
description "The minimum Frame Delay Variation achieved";
}
leaf fdv-max {
type uint32;
units "μs";
description "The maximum Frame Delay Variation achieved";
}
leaf fdv-avg {
type uint32;
units "μs";
description "The average Frame Delay Variation achieved";
}
leaf fdv-meas {
type uint32;
units "μs";
description
"The instantaneous Frame Delay Variation measured
at the time of this result set";
}
}
/*
* Features
*/
feature emix {
description
"This feature indicates that the device supports
EMIX style of repeating frame rates patterns";
reference
"Rec. ITU-T Y.1564 (03/2011) Section 8.1.1";
}
/*
* Configuration
*/
container y1564-test {
description "The overall configuration of the Y.1564
tests are done through the 'service' entities";
leaf config-step-duration {
type uint16 {
range 1..60;
}
units second;
default 60;
description "The duration of each step when
performing Configuration tests";
reference "Rec. ITU-T Y.1564 (03/2011) Section 8.3";
}
choice performance-duration-choice {
description
"Duration can be chosen from enumerated values or
specified as a duration in minutes";
reference "Rec. ITU-T Y.1564 (03/2011) Section 8.2.1";
case fixed-durations-renamed {
leaf performance-duration-fixed {
type enumeration {
enum Test15m {
value 15;
description "15 minute test duration";
}
enum Test2h {
value 120;
description "2 hour test duration";
}
enum Test24h {
value 1440;
description "24 hour test duration";
}
enum Unbounded {
description "Unbounded test duration";
}
}
default Test15m;
description "Fixed durations set";
}
}
case test-duration-minutes {
leaf performance-duration {
type uint16 {
range 1..max;
}
units min;
description
"The duration of Performance tests specified in minutes";
reference "Rec. ITU-T Y.1564 (03/2011) Section 8.2.1";
}
}
}
leaf performance-frame-size {
type sa:frame-size-type;
units octet;
default 512;
description
"The frame size used for the performance test.
Frame sizes for configuration are configured at a
the service level. This is a constant value per service (
frame size repeating emix values are not supported)";
reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1.1";
}
list service-config {
key service-id;
description "The services can be configured on this device";
uses service-attributes-group;
leaf enabled {
type boolean;
default true;
description "Toggles whether the service is enabled in tests";
}
container mep-config {
presence "Presence indicates that a MEP has been configured";
uses msea:mep-config-attribs-noref;
leaf remote-mep-id {
type msea:mep-id-type;
must "current()/../maintenance-association-end-point != current()" {
error-message "Remote MEP Id must not be the same as Local MEP Id";
error-app-tag "msea-svc-must-01";
}
//mandatory true; //Should not be mandatory in a top level container
description "The Id of the remote MEP";
}
container overwrite-pcp {
presence "Enables PCP Overwrite";
description "If present allows attributes to be
specified for the PCP overwrite";
uses sa:overwrite-pcp-attribs;
}
}
leaf config-frame-size {
type sa:frame-size-type;
units octet;
default 512;
description
"The frame size used for the service configuration test.
Frame sizes for performance test is configured at a
higher level. This is a constant value per service (
frame size repeating emix values are not supported)";
reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1.1";
}
leaf cir {
type uint16 {
range min..1000;
}
units "Mb/s";
default 1;
description "Committed Information Rate. If 0 then will return zeros";
reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1";
}
leaf eir {
type uint16 {
range min..1000;
}
units "Mb/s";
description "Excess Information Rate. If 0 then this test is disabled";
reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1";
}
leaf colour-aware {
type boolean;
default true;
description "Indicates if the service is colour aware or not";
reference "Rec. ITU-T Y.1564 (03/2011) Section 6.2.1";
}
leaf m-factor {
type uint16;
units "kb/s";
description "The M factor is added to allow for the effect of
the traffic policer's CBS and EBS settings, and test time.
Experience will determine the values for M.
Additional guidance on M is for further study.";
reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1.2 C.2";
}
container enable-step-test {
presence "Enables step test";
description "If this item is present then a step load test of
CIR will be performed.
Otherwise simple validation of CIR will be performed.";
reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1.2";
leaf step-load-size-override {
type uint16 {
range 1..1000;
}
units "Mb/s";
description "A manually specified Step Load size in Mb/s.
A maximum of 4 steps will be taken. If not specified
the default behaviour means the CIR rate divided by
4 rounded up to nearest Mb/s. When CIR rate is below 4Mb/s
then a corresponding nuumber of steps will be used";
reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1";
}
}
container enable-policing-test {
presence "Enables Policing test";
description "If this item is present then a Policing
test will be performed.
Otherwise no Policing will be performed.";
reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1.2";
}
container service-acceptance-criteria {
description "Attributes that tune the Service Acceptance
Criteria per service.";
leaf accepted-flr {
type uint32 {
range min..100000;
}
units "m%";
description "A measured Frame Loss Ratio greater than
or equal to this value will result in test fail.
Units are 0.001%. Default is 0";
reference "Rec. ITU-T Y.1564 (03/2011) Section 8.3";
}
leaf accepted-ftd {
type uint32;
units "μs";
mandatory true;
description "A measured Frame Transfer Delay greater than
or equal to this value will result in test fail.";
reference "Rec. ITU-T Y.1564 (03/2011) Section 8.3";
}
leaf accepted-fdv {
type uint32;
units "μs";
mandatory true;
description "A measured Frame Delay Variation greater than
or equal to this value will result in test fail.";
reference "Rec. ITU-T Y.1564 (03/2011) Section 8.3";
}
leaf accepted-availability {
type uint32 {
range min..100000;
}
units "m%";
default 100000;
description "A measured Availability for a performance
test must meet or exceed this value. Values are in
milli-percent. Default is 100%";
}
}
}
}
container y1564-results {
config false;
description "Top level container for results from the tests";
container configuration {
description
"The results of the Y.1564 Configuration tests on each
service which was enabled when the test was run";
reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1.3";
list service {
key service-id;
description "The results for the services configured on this device";
uses service-attributes-group;
uses sa:results-header-group;
container cir-results {
description "Results for Committed Information Rate
part of the test";
leaf steps {
type uint8;
description "Indicates the number if steps taken so far.";
}
list step {
key step-id;
description "A list of results for each of the steps for
the CIR test";
leaf step-id {
type uint8;
mandatory true;
description "The index of the step";
}
uses result-attributes-group;
uses pass-fail-group;
container green-frames {
uses y1564-test-result-group;
description "The details of frames marked green during
the step of the CIR test";
}
}
}
container eir-results {
description "Results for Excess Information Rate
part of the test";
uses result-attributes-group;
uses pass-fail-group;
container green-frames {
uses y1564-test-result-group;
description
"The details of frames marked green of the EIR test";
}
container yellow-frames {
uses y1564-test-result-group;
description
"The details of frames marked yellow of the EIR test";
}
}
container policer-results {
presence "Can be omitted if policer test is
not enabled on this service";
description "Container for the policer results";
uses result-attributes-group;
uses pass-fail-group;
container green-frames {
uses y1564-test-result-group;
description
"The details of frames marked green of the Policer test";
}
container yellow-frames {
uses y1564-test-result-group;
description
"The details of frames marked yellow of the Policer test";
}
}
}
}
container performance {
description
"The results of the Y.1564 Performance tests on each
service was 'enabled'";
reference "Rec. ITU-T Y.1564 (03/2011) Section 8.2.2";
uses sa:results-header-group;
list service {
key service-id;
description "The services can be configured on this device";
uses service-attributes-group;
uses pass-fail-group;
uses y1564-test-result-group;
leaf avail-sec {
type uint32;
units "s";
description
"The count of seconds during the test period for which
service was Available";
}
}
}
}
/*
* RPCs
*/
rpc run-y1564-test {
description
"Run the configured Y.1564 test on each service
that has been marked 'enabled'";
input {
leaf tests-enabled {
type bits {
bit configuration {
description "Runs the configuration tests";
}
bit performance {
description "Runs the performance tests";
}
}
default "configuration performance";
description
"Bit mask to define which parts of the test are run.
Specify as a set of space separated string values";
}
}
}
rpc stop-y1564-test {
description
"Stop the running Y.1564 test on all services";
}
/*
* Notifications
*/
notification y1564-test-updated {
description
"A y1564-test-updated notification is sent
when the state of a test changes.";
uses sa:notification-group;
leaf service-id {
type uint16;
mandatory true;
description "The ID of the Service that is being tested";
}
}
}