@Nullable protected final PathId readPathId(@Nonnull final ByteBuf nlri, final Class<? extends AddressFamily> afi, final Class<? extends SubsequentAddressFamily> safi, final PeerSpecificParserConstraint constraint) { if (MultiPathSupportUtil.isTableTypeSupported(constraint, new BgpTableTypeImpl(afi, safi))) { return PathIdUtil.readPathId(nlri); } return null; }
private static DestinationIpv4 prefixes(final ByteBuf nlri, final PeerSpecificParserConstraint constraints, final Class<? extends AddressFamily> afi, final Class<? extends SubsequentAddressFamily> safi) { final List<Ipv4Prefixes> prefixes = new ArrayList<>(); while (nlri.isReadable()) { final Ipv4PrefixesBuilder prefixesBuilder = new Ipv4PrefixesBuilder(); if (MultiPathSupportUtil.isTableTypeSupported(constraints, new BgpTableTypeImpl(afi, safi))) { prefixesBuilder.setPathId(PathIdUtil.readPathId(nlri)); } prefixesBuilder.setPrefix(Ipv4Util.prefixForByteBuf(nlri)); prefixes.add(prefixesBuilder.build()); } return new DestinationIpv4Builder().setIpv4Prefixes(prefixes).build(); }
private static DestinationIpv6 prefixes(final ByteBuf nlri, final PeerSpecificParserConstraint constraint, final Class<? extends AddressFamily> afi, final Class<? extends SubsequentAddressFamily> safi) { final List<Ipv6Prefixes> prefixes = new ArrayList<>(); final boolean supported = MultiPathSupportUtil.isTableTypeSupported(constraint, new BgpTableTypeImpl(afi, safi)); while (nlri.isReadable()) { final Ipv6PrefixesBuilder prefixesBuilder = new Ipv6PrefixesBuilder(); if (supported) { prefixesBuilder.setPathId(PathIdUtil.readPathId(nlri)); } prefixesBuilder.setPrefix(Ipv6Util.prefixForByteBuf(nlri)); prefixes.add(prefixesBuilder.build()); } return new DestinationIpv6Builder().setIpv6Prefixes(prefixes).build(); }