blob: fbdd6fbb21a06306211f8703b2d457c5ae56fc74 [file] [log] [blame]
Tomáš Peckadac27d42021-02-22 13:20:05 +01001module czechlight-network {
2 yang-version 1.1;
3 namespace "http://czechlight.cesnet.cz/yang/czechlight-network";
4 prefix cla-network;
5
6 import ietf-interfaces {
7 prefix if;
8 }
9
Tomáš Pecka2a4ea7b2021-03-30 17:01:37 +020010 import ietf-routing {
11 prefix rt;
12 }
13
Tomáš Peckadac27d42021-02-22 13:20:05 +010014 import ietf-ip {
15 prefix ip;
16 }
17
18 import iana-if-type {
19 prefix ianaift;
20 }
21
Tomáš Pecka2d87fd12021-05-30 14:20:28 +020022 import ietf-ipv6-unicast-routing {
23 prefix v6ur;
24 }
25
Tomáš Peckadac27d42021-02-22 13:20:05 +010026 revision 2021-02-22 {
27 description
28 "Initial version. Removes interface statistics in ietf-interfaces model, removes deprecated container
29 ietf-interfaces:interface-state and makes the nodes in ietf-interfaces model config false.";
30 }
31
Tomáš Pecka44131292021-03-10 12:30:43 +010032 // We don't support discontinuity time (yet)
33 deviation /if:interfaces/if:interface/if:statistics/if:discontinuity-time { deviate not-supported; }
Tomáš Peckadac27d42021-02-22 13:20:05 +010034
Tomáš Pecka2d87fd12021-05-30 14:20:28 +020035 // IPv6 router advertisements is not supported
36 deviation /if:interfaces/if:interface/ip:ipv6/v6ur:ipv6-router-advertisements { deviate not-supported; }
37
Tomáš Pecka2a4ea7b2021-03-30 17:01:37 +020038 // Remove deprecated ietf-interfaces-state and ietf-routing containers. Beware, rt:routing-state references if:interfaces-state.
39 deviation /rt:routing-state { deviate not-supported; }
Tomáš Peckadac27d42021-02-22 13:20:05 +010040 deviation /if:interfaces-state { deviate not-supported; }
41
Tomáš Pecka71a98b02021-05-17 15:59:40 +020042 // As of now we implement the ietf-routing model to contain operational data only
Tomáš Pecka2a4ea7b2021-03-30 17:01:37 +020043 deviation /rt:routing { deviate add { config false; } }
Tomáš Pecka14e663e2021-03-08 13:35:33 +010044
Tomáš Pecka71a98b02021-05-17 15:59:40 +020045 // We do not support configuring some parts of if:interfaces tree
Tomáš Peckade0ef2f2021-07-08 13:23:50 +020046 deviation /if:interfaces/if:interface/ip:ipv4/ip:forwarding { deviate add { config false; } }
47 deviation /if:interfaces/if:interface/ip:ipv4/ip:mtu { deviate add { config false; } }
48 deviation /if:interfaces/if:interface/ip:ipv4/ip:neighbor { deviate add { config false; } }
49 deviation /if:interfaces/if:interface/ip:ipv6/ip:forwarding { deviate add { config false; } }
50 deviation /if:interfaces/if:interface/ip:ipv6/ip:mtu { deviate add { config false; } }
51 deviation /if:interfaces/if:interface/ip:ipv6/ip:neighbor { deviate add { config false; } }
52 deviation /if:interfaces/if:interface/ip:ipv6/ip:dup-addr-detect-transmits { deviate add { config false; } }
Tomáš Pecka71a98b02021-05-17 15:59:40 +020053
54 // User should not create new links or reconfigure link types
55 deviation /if:interfaces/if:interface/if:name {
56 deviate add {
57 must '. = "br0" or . = "eth0" or . = "eth1" or . = "osc" or . = "oscW" or . = "oscE"' {
58 error-message "Link name must be chosen from the following options: {br0, eth0, eth1, osc, oscW, oscE}.";
59 }
60 }
61 }
62
63 deviation /if:interfaces/if:interface/if:type {
64 deviate add {
65 must '(../if:name = "br0" and . = "ianaift:bridge") or
66 (../if:name = "eth0" and . = "ianaift:ethernetCsmacd") or
67 (../if:name = "eth1" and . = "ianaift:ethernetCsmacd") or
68 (../if:name = "osc" and . = "ianaift:ethernetCsmacd") or
69 (../if:name = "oscW" and . = "ianaift:ethernetCsmacd") or
70 (../if:name = "oscE" and . = "ianaift:ethernetCsmacd")' {
71 error-message "Link type can't be reconfigured.";
72 }
73 }
74 }
75
Tomáš Peckade0ef2f2021-07-08 13:23:50 +020076 // Make it hard to accidentally lose connection by removing ipv4/ipv6 presence containers or all IP addresses
77 deviation /if:interfaces/if:interface {
78 deviate add {
79 must 'if:enabled = "false" or
80 ip:ipv4/ip:enabled = "true" or
81 ip:ipv6/ip:enabled = "true"' {
82 error-message "There must always be at least one protocol active unless the interface is disabled.";
83 }
84 }
85 }
86
87 deviation /if:interfaces/if:interface/ip:ipv4 {
88 deviate add {
89 must 'ip:enabled = "false" or count(ip:address) > 0' {
90 error-message "There must always be at least one IPv4 address unless the protocol is disabled.";
91 }
92 }
93 }
94
95 deviation /if:interfaces/if:interface/ip:ipv6 {
96 deviate add {
97 must 'ip:enabled = "false" or count(ip:address) > 0' {
98 error-message "There must always be at least one IPv6 address unless the protocol is disabled.";
99 }
100 }
101 }
102
Tomáš Pecka14e663e2021-03-08 13:35:33 +0100103 // IPv6 address autoconfiguration is not supported
104 deviation /if:interfaces/if:interface/ip:ipv6/ip:autoconf { deviate not-supported; }
Tomáš Pecka91d5fe72021-03-31 18:42:39 +0200105
106 identity dhcp {
107 base rt:routing-protocol;
108 description "Identity for route installed by DHCP.";
109 }
110 identity ra {
111 base rt:routing-protocol;
112 description "Identity for route installed by router advertisement.";
113 }
Tomáš Peckadac27d42021-02-22 13:20:05 +0100114}