+
+ private static void serializeIsisNode(final ContainerNode isis, final ByteBuf buffer) {
+ buffer.writeBytes((byte[])isis.getChild(ISO_SYSTEM_NID).get().getValue());
+ }
+
+ private static void serializeOspfNode(final ContainerNode ospf, final ByteBuf buffer) {
+ buffer.writeInt(UnsignedInteger.valueOf((Long)ospf.getChild(OSPF_ROUTER_NID).get().getValue()).intValue());
+ }
+
+ private static void serializeRouterId(final ChoiceNode routerId, final ByteBuf buffer) {
+ if (routerId.getChild(ISIS_NODE_NID).isPresent()) {
+ serializeIsisNode((ContainerNode)routerId.getChild(ISIS_NODE_NID).get(), buffer);
+ } else if (routerId.getChild(ISIS_PSEUDONODE_NID).isPresent()) {
+ final ContainerNode isisPseudo = (ContainerNode)routerId.getChild(ISIS_PSEUDONODE_NID).get();
+ serializeIsisNode((ContainerNode) isisPseudo.getChild(ISIS_ROUTER_NID).get(), buffer);
+ if (isisPseudo.getChild(PSN_NID).isPresent()) {
+ buffer.writeByte(((Short)isisPseudo.getChild(PSN_NID).get().getValue()));
+ } else {
+ buffer.writeZero(PSN_LENGTH);
+ }
+ } else if (routerId.getChild(OSPF_NODE_NID).isPresent()) {
+ serializeOspfNode((ContainerNode)routerId.getChild(OSPF_NODE_NID).get(), buffer);
+ } else if (routerId.getChild(OSPF_PSEUDONODE_NID).isPresent()) {
+ final ContainerNode ospfPseudo = (ContainerNode)routerId.getChild(OSPF_PSEUDONODE_NID).get();
+ serializeOspfNode((ContainerNode)ospfPseudo.getChild(OSPF_NODE_NID), buffer);
+ buffer.writeInt(UnsignedInteger.valueOf((Long)ospfPseudo.getChild(LAN_IFACE_NID).get().getValue()).intValue());
+ }
+ }
+
+ static void serializeNodeDescriptors(final ContainerNode descriptors, final ByteBuf buffer) {
+ final Optional<DataContainerChild<? extends PathArgument, ?>> asNumber = descriptors.getChild(AS_NUMBER_NID);
+ if (asNumber.isPresent()) {
+ TlvUtil.writeTLV(AS_NUMBER, Unpooled.copyInt(UnsignedInteger.valueOf((Long)asNumber.get().getValue()).intValue()), buffer);
+ }
+ final Optional<DataContainerChild<? extends PathArgument, ?>> domainId = descriptors.getChild(DOMAIN_NID);
+ if (domainId.isPresent()) {
+ TlvUtil.writeTLV(BGP_LS_ID, Unpooled.copyInt(UnsignedInteger.valueOf((Long)domainId.get().getValue()).intValue()), buffer);
+ }
+ final Optional<DataContainerChild<? extends PathArgument, ?>> areaId = descriptors.getChild(AREA_NID);
+ if (areaId.isPresent()) {
+ TlvUtil.writeTLV(AREA_ID, Unpooled.copyInt(UnsignedInteger.valueOf((Long)domainId.get().getValue()).intValue()), buffer);
+ }
+ final Optional<DataContainerChild<? extends PathArgument, ?>> routerId = descriptors.getChild(ROUTER_NID);
+ if (routerId.isPresent()) {
+ final ByteBuf routerIdBuf = Unpooled.buffer();
+ serializeRouterId((ChoiceNode)routerId.get(), routerIdBuf);
+ TlvUtil.writeTLV(IGP_ROUTER_ID, routerIdBuf, buffer);
+ }
+ }