@@ 303-339 (lines=37) @@ | ||
300 | return True |
|
301 | ||
302 | ||
303 | @Command.register('text', 'announce flow') |
|
304 | def announce_flow(self, reactor, service, line): |
|
305 | def callback(): |
|
306 | try: |
|
307 | descriptions, command = extract_neighbors(line) |
|
308 | peers = match_neighbors(reactor.peers(), descriptions) |
|
309 | if not peers: |
|
310 | self.log_failure('no neighbor matching the command : %s' % command) |
|
311 | reactor.processes.answer_error(service) |
|
312 | yield True |
|
313 | return |
|
314 | ||
315 | changes = self.api_flow(command) |
|
316 | if not changes: |
|
317 | self.log_failure('command could not parse flow in : %s' % command) |
|
318 | reactor.processes.answer_error(service) |
|
319 | yield True |
|
320 | return |
|
321 | ||
322 | for change in changes: |
|
323 | change.nlri.action = OUT.ANNOUNCE |
|
324 | reactor.configuration.inject_change(peers, change) |
|
325 | self.log_message( |
|
326 | 'flow added to %s : %s' % (', '.join(peers) if peers else 'all peers', change.extensive()) |
|
327 | ) |
|
328 | yield False |
|
329 | ||
330 | reactor.processes.answer_done(service) |
|
331 | except ValueError: |
|
332 | self.log_failure('issue parsing the flow') |
|
333 | reactor.processes.answer_error(service) |
|
334 | yield True |
|
335 | except IndexError: |
|
336 | self.log_failure('issue parsing the flow') |
|
337 | reactor.processes.answer_error(service) |
|
338 | yield True |
|
339 | ||
340 | reactor.asynchronous.schedule(service, line, callback()) |
|
341 | return True |
|
342 | ||
@@ 127-163 (lines=37) @@ | ||
124 | return True |
|
125 | ||
126 | ||
127 | @Command.register('text', 'announce vpls') |
|
128 | def announce_vpls(self, reactor, service, line): |
|
129 | def callback(): |
|
130 | try: |
|
131 | descriptions, command = extract_neighbors(line) |
|
132 | peers = match_neighbors(reactor.peers(), descriptions) |
|
133 | if not peers: |
|
134 | self.log_failure('no neighbor matching the command : %s' % command) |
|
135 | reactor.processes.answer_error(service) |
|
136 | yield True |
|
137 | return |
|
138 | ||
139 | changes = self.api_vpls(command) |
|
140 | if not changes: |
|
141 | self.log_failure('command could not parse vpls in : %s' % command) |
|
142 | reactor.processes.answer_error(service) |
|
143 | yield True |
|
144 | return |
|
145 | ||
146 | for change in changes: |
|
147 | change.nlri.action = OUT.ANNOUNCE |
|
148 | reactor.configuration.inject_change(peers, change) |
|
149 | self.log_message( |
|
150 | 'vpls added to %s : %s' % (', '.join(peers) if peers else 'all peers', change.extensive()) |
|
151 | ) |
|
152 | yield False |
|
153 | ||
154 | reactor.processes.answer_done(service) |
|
155 | except ValueError: |
|
156 | self.log_failure('issue parsing the vpls') |
|
157 | reactor.processes.answer_error(service) |
|
158 | yield True |
|
159 | except IndexError: |
|
160 | self.log_failure('issue parsing the vpls') |
|
161 | reactor.processes.answer_error(service) |
|
162 | yield True |
|
163 | ||
164 | reactor.asynchronous.schedule(service, line, callback()) |
|
165 | return True |
|
166 |