+ this.routeCounter.increaseCount();
+ if (!this.mpSupport) {
+ return buildUpdate(Collections.singleton(route), Collections.<MapEntryNode>emptyList(), routeAttributes(route));
+ }
+ return this.support.buildUpdate(Collections.singleton(route), Collections.<MapEntryNode>emptyList(), routeAttributes(route));
+ }
+
+ private Update buildUpdate(@Nonnull final Collection<MapEntryNode> advertised, @Nonnull final Collection<MapEntryNode> withdrawn, @Nonnull final Attributes attr) {
+ final UpdateBuilder ub = new UpdateBuilder()
+ .setWithdrawnRoutes(new WithdrawnRoutesBuilder().setWithdrawnRoutes(extractPrefixes(withdrawn)).build())
+ .setNlri(new NlriBuilder().setNlri(extractPrefixes(advertised)).build());
+ ub.setAttributes(attr);
+ return ub.build();
+ }
+
+ private List<Ipv4Prefix> extractPrefixes(final Collection<MapEntryNode> routes) {
+ final List<Ipv4Prefix> prefs = new ArrayList<>(routes.size());
+ for (final MapEntryNode ipv4Route : routes) {
+ final String prefix = (String) ipv4Route.getChild(this.routeKeyLeaf).get().getValue();
+ prefs.add(new Ipv4Prefix(prefix));
+ }
+ return prefs;
+ }
+
+ public void close() {
+ this.registerDataTreeChangeListener.close();
+ }
+
+ boolean isMpSupported() {
+ return this.mpSupport;