1 # PCEP message and implicit object definitions
3 # Copyright (c) 2012,2013 Cisco Systems, Inc. and others. All rights reserved.
5 # This program and the accompanying materials are made available under the
6 # terms of the Eclipse Public License v1.0 which accompanies this distribution,
7 # and is available at http://www.eclipse.org/legal/epl-v10.html
10 from . import object # Note: object here is a module
13 class Open(base.Message):
17 ('open', object.Open, 1),
22 class Keepalive(base.Message):
28 class GMon(base.Group):
30 ('mon', object.Monitoring, 1),
31 ('pcc', object.PccIdReq, 1),
32 ('pce', object.PceId, '*'),
36 class GRro(base.Group):
38 ('rro', object.Rro, 1),
39 ('rbw', object.Bandwidth, '?'),
43 # Note: RFC 5520 PK says there's either a PatkKey,
44 # or all other objects in a request
45 # In RFC 5440 PCEP, Endpoints is a REQUIRED object
46 class Request(base.Group):
49 ('pk', object.PathKey, '?'), # RFC 5520 PK
50 ('ep', object.Endpoints, '?'), # Actually required
51 ('lsp', object.Lsp, '?'), # D STATEFUL
52 ('lspa', object.Lspa, '?'),
53 ('bw', object.Bandwidth, '?'),
54 ('metric', object.Metric, '*'),
55 ('of', object.Of, '?'), # RFC 5541 OF
57 ('iro', object.Iro, '?'),
58 ('lb', object.LoadBalancing, '?'),
59 ('xro', object.Xro, '?'), # RFC 5521 XRO
63 class GSvec(base.Group):
65 ('svec', object.Svec, 1),
66 ('of', object.Of, '?'), # RFC 5541 OF
67 ('metric', object.Metric, '*'), # RFC 5541 OF
71 class PCReq(base.Message):
75 ('gmon', GMon, '?'), # RFC 5886 MON
76 ('gsvec', GSvec, '*'),
77 ('request', Request, '+'),
81 class PcePathAttributes(base.Group):
83 ('of', object.Of, '?'), # RFC 5541 OF
84 ('lspa', object.Lspa, '?'),
85 ('bw', object.Bandwidth, '?'),
86 ('metric', object.Metric, '*'),
87 ('iro', object.Iro, '?'), # Not in D STATEFUL-01
91 class PcePath(base.Group):
93 ('ero', object.Ero, 1),
94 ('pcepa', PcePathAttributes, '?'),
98 class MetricPce(base.Group):
100 ('pce', object.PceId, 1),
101 ('pt', object.ProcTime, '?'),
102 ('ol', object.Overload, '?'),
106 class Response(base.Group):
108 ('rp', object.Rp, 1),
109 ('gmon', GMon, '?'), # Without pce list # RFC 5886 MON
110 ('lsp', object.Lsp, '?'), # D STATEFUL
111 ('nopath', object.NoPath, '?'),
112 ('pcepa', PcePathAttributes, '?'),
113 ('path', PcePath, '*'),
114 ('mp', MetricPce, '*'), # RFC 5886 MON
118 class PCRep(base.Message):
122 ('response', Response, '+'),
126 class GNotify(base.Group):
128 ('rp', object.Rp, '*'),
129 ('notify', object.Notification, '+'),
133 class PCNtf(base.Message):
137 ('gnotify', GNotify, '+'),
141 class GError(base.Group):
142 """Unified PCEP error item"""
144 ('rp', object.Rp, '*'),
145 ('error', object.Error, '+'),
146 ('lsp', object.Lsp, '?'), # D STATEFUL
150 class PCErr(base.Message):
154 ('gerror', GError, '+'),
155 ('open', object.Open, '?'),
159 class Close(base.Message):
163 ('close', object.Close, 1)
167 class PCMonReq(base.Message):
172 ('gsvec', GSvec, '*'),
173 ('request', Request, '+'),
177 class PCMonRep(base.Message):
181 ('gmon', GMon, '?'), # Without pce list
182 ('rp', object.Rp, '*'),
183 ('mp', MetricPce, '*'),
187 class PccPath(base.Group):
189 ('ero', object.Ero, 1),
190 ('lspa', object.Lspa, '?'),
191 ('bw', object.Bandwidth, '?'),
192 ('rro', object.Rro, '?'),
193 ('metric', object.Metric, '*'),
197 class StateReport(base.Group):
199 ('lsp', object.Lsp, 1),
200 ('path', PccPath, '*'),
204 class PCRpt(base.Message):
208 ('report', StateReport, '+'),
213 class UpdateRequest(base.Group):
215 ('lsp', object.Lsp, 1),
216 ('path', PcePath, '*'),
220 class PCUpd(base.Message):
224 ('update', UpdateRequest, '+'),
229 class CreateRequest(base.Group):
231 ('end-points', object.Endpoints, 1),
232 ('lspa', object.Lspa, 1),
233 ('ero', object.Ero, '?'),
234 ('bw', object.Bandwidth, '?'),
235 ('metric', object.Metric, '*'),
239 class PCCreate(base.Message):
243 ('create', CreateRequest, '+'),
246 # We do not need special handling for unknown messages
247 class Unknown(base.Message):
249 base.Message.unknown_class = Unknown