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
14 class Open(base.Message):
18 ('open', object.Open, 1),
23 class Keepalive(base.Message):
30 class GMon(base.Group):
32 ('mon', object.Monitoring, 1),
33 ('pcc', object.PccIdReq, 1),
34 ('pce', object.PceId, '*'),
39 class GRro(base.Group):
41 ('rro', object.Rro, 1),
42 ('rbw', object.Bandwidth, '?'),
47 # Note: RFC 5520 PK says there's either a PatkKey,
48 # or all other objects in a request
49 # In RFC 5440 PCEP, Endpoints is a REQUIRED object
50 class Request(base.Group):
53 ('pk', object.PathKey, '?'), # RFC 5520 PK
54 ('ep', object.Endpoints, '?'), # Actually required
55 ('lsp', object.Lsp, '?'), # D STATEFUL
56 ('lspa', object.Lspa, '?'),
57 ('bw', object.Bandwidth, '?'),
58 ('metric', object.Metric, '*'),
59 ('of', object.Of, '?'), # RFC 5541 OF
61 ('iro', object.Iro, '?'),
62 ('lb', object.LoadBalancing, '?'),
63 ('xro', object.Xro, '?'), # RFC 5521 XRO
68 class GSvec(base.Group):
70 ('svec', object.Svec, 1),
71 ('of', object.Of, '?'), # RFC 5541 OF
72 ('metric', object.Metric, '*'), # RFC 5541 OF
77 class PCReq(base.Message):
81 ('gmon', GMon, '?'), # RFC 5886 MON
82 ('gsvec', GSvec, '*'),
83 ('request', Request, '+'),
88 class PcePathAttributes(base.Group):
90 ('of', object.Of, '?'), # RFC 5541 OF
91 ('lspa', object.Lspa, '?'),
92 ('bw', object.Bandwidth, '?'),
93 ('metric', object.Metric, '*'),
94 ('iro', object.Iro, '?'), # Not in D STATEFUL-01
99 class PcePath(base.Group):
101 ('ero', object.Ero, 1),
102 ('pcepa', PcePathAttributes, '?'),
107 class MetricPce(base.Group):
109 ('pce', object.PceId, 1),
110 ('pt', object.ProcTime, '?'),
111 ('ol', object.Overload, '?'),
116 class Response(base.Group):
118 ('rp', object.Rp, 1),
119 ('gmon', GMon, '?'), # Without pce list # RFC 5886 MON
120 ('lsp', object.Lsp, '?'), # D STATEFUL
121 ('nopath', object.NoPath, '?'),
122 ('pcepa', PcePathAttributes, '?'),
123 ('path', PcePath, '*'),
124 ('mp', MetricPce, '*'), # RFC 5886 MON
129 class PCRep(base.Message):
133 ('response', Response, '+'),
138 class GNotify(base.Group):
140 ('rp', object.Rp, '*'),
141 ('notify', object.Notification, '+'),
146 class PCNtf(base.Message):
150 ('gnotify', GNotify, '+'),
155 class GError(base.Group):
156 """Unified PCEP error item"""
158 ('rp', object.Rp, '*'),
159 ('error', object.Error, '+'),
160 ('lsp', object.Lsp, '?'), # D STATEFUL
165 class PCErr(base.Message):
169 ('gerror', GError, '+'),
170 ('open', object.Open, '?'),
175 class Close(base.Message):
179 ('close', object.Close, 1)
184 class PCMonReq(base.Message):
189 ('gsvec', GSvec, '*'),
190 ('request', Request, '+'),
195 class PCMonRep(base.Message):
199 ('gmon', GMon, '?'), # Without pce list
200 ('rp', object.Rp, '*'),
201 ('mp', MetricPce, '*'),
206 class PccPath(base.Group):
208 ('ero', object.Ero, 1),
209 ('lspa', object.Lspa, '?'),
210 ('bw', object.Bandwidth, '?'),
211 ('rro', object.Rro, '?'),
212 ('metric', object.Metric, '*'),
217 class StateReport(base.Group):
219 ('lsp', object.Lsp, 1),
220 ('path', PccPath, '*'),
225 class PCRpt(base.Message):
229 ('report', StateReport, '+'),
234 class UpdateRequest(base.Group):
236 ('lsp', object.Lsp, 1),
237 ('path', PcePath, '*'),
242 class PCUpd(base.Message):
246 ('update', UpdateRequest, '+'),
251 class CreateRequest(base.Group):
253 ('end-points', object.Endpoints, 1),
254 ('lspa', object.Lspa, 1),
255 ('ero', object.Ero, '?'),
256 ('bw', object.Bandwidth, '?'),
257 ('metric', object.Metric, '*'),
262 class PCCreate(base.Message):
266 ('create', CreateRequest, '+'),
270 # We do not need special handling for unknown messages
271 class Unknown(base.Message):
273 base.Message.unknown_class = Unknown