@Override public Optional<MatchBuilder> process(@Nonnull ArpShaCase source, MatchResponseConvertorData data, ConvertorExecutor convertorExecutor) { final MatchBuilder matchBuilder = data.getMatchBuilder(); final ArpMatchBuilder arpMatchBuilder = data.getArpMatchBuilder(); ArpSha arpSha = source.getArpSha(); MacAddress macAddress = arpSha.getMacAddress(); if (macAddress != null) { ArpSourceHardwareAddressBuilder arpSourceHardwareAddressBuilder = new ArpSourceHardwareAddressBuilder(); arpSourceHardwareAddressBuilder.setAddress(macAddress); byte[] mask = arpSha.getMask(); if (mask != null) { arpSourceHardwareAddressBuilder.setMask(new MacAddress(ByteBufUtils .macAddressToString(mask))); } arpMatchBuilder.setArpSourceHardwareAddress(arpSourceHardwareAddressBuilder.build()); matchBuilder.setLayer3Match(arpMatchBuilder.build()); } return Optional.of(matchBuilder); } }
/** * Set ARP_SHA Instructions * @param ib Map InstructionBuilder * @param macsrc the macsrc * @return instructionbuilder with new instructions */ public static InstructionBuilder createSrcArpMacInstructions(InstructionBuilder ib, MacAddress macsrc) { List<Action> actionList = Lists.newArrayList(); ActionBuilder ab = new ActionBuilder(); SetFieldBuilder setFieldBuilder = new SetFieldBuilder(); ArpMatchBuilder arpmatch = new ArpMatchBuilder(); ArpSourceHardwareAddressBuilder arpsrc = new ArpSourceHardwareAddressBuilder(); arpsrc.setAddress(macsrc); arpmatch.setArpSourceHardwareAddress(arpsrc.build()); setFieldBuilder.setLayer3Match(arpmatch.build()); ab.setAction(new SetFieldCaseBuilder().setSetField(setFieldBuilder.build()).build()); ab.setOrder(0); ab.setKey(new ActionKey(0)); actionList.add(ab.build()); ApplyActionsBuilder aab = new ApplyActionsBuilder(); aab.setAction(actionList); // Wrap our Apply Action in an Instruction ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build()); return ib; }
/** * Builds the arp match with src and destintion mac address. * @param matchBuilder the match builder * @param srcMac the src mac address , will not be added to match if null. * @param dstMac the destination mac address, will not be added to match if null. * @return the match builder with the matches */ public static MatchBuilder addArpMacMatch(MatchBuilder matchBuilder, String srcMac, String dstMac) { ArpMatchBuilder arpMatch = new ArpMatchBuilder(); if (null != srcMac) { ArpSourceHardwareAddressBuilder arpSrc = new ArpSourceHardwareAddressBuilder(); arpSrc.setAddress(new MacAddress(srcMac)); arpMatch.setArpSourceHardwareAddress(arpSrc.build()); } if (null != dstMac) { ArpTargetHardwareAddressBuilder arpDst = new ArpTargetHardwareAddressBuilder(); arpDst.setAddress(new MacAddress(dstMac)); arpMatch.setArpTargetHardwareAddress(arpDst.build()); } matchBuilder.setLayer3Match(arpMatch.build()); return matchBuilder; }
/** * Set ARP_SHA Instructions * @param ib Map InstructionBuilder * @param macsrc the macsrc * @return instructionbuilder with new instructions */ public static InstructionBuilder createSrcArpMacInstructions(InstructionBuilder ib, MacAddress macsrc) { List<Action> actionList = new ArrayList<>(); ActionBuilder ab = new ActionBuilder(); SetFieldBuilder setFieldBuilder = new SetFieldBuilder(); ArpMatchBuilder arpmatch = new ArpMatchBuilder(); ArpSourceHardwareAddressBuilder arpsrc = new ArpSourceHardwareAddressBuilder(); arpsrc.setAddress(macsrc); arpmatch.setArpSourceHardwareAddress(arpsrc.build()); setFieldBuilder.setLayer3Match(arpmatch.build()); ab.setAction(new SetFieldCaseBuilder().setSetField(setFieldBuilder.build()).build()); ab.setOrder(0); ab.setKey(new ActionKey(0)); actionList.add(ab.build()); ApplyActionsBuilder aab = new ApplyActionsBuilder(); aab.setAction(actionList); // Wrap our Apply Action in an Instruction ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build()); return ib; }
); } else if (field.equals(ArpSha.class)) { ArpSourceHardwareAddressBuilder arpSha = new ArpSourceHardwareAddressBuilder(); ArpShaCase arpShaCase = ((ArpShaCase) entry.getMatchEntryValue()); arpSha.setAddress(arpShaCase.getArpSha().getMacAddress());
private static Layer3Match setLayer3MatchAsArp(final Match sourceMatch, final Inet4Address inetSourceAddress, final Inet4Address inetDestAddress) { String inetSourceAddressStr = InetAddresses .toAddrString(inetSourceAddress); Ipv4Prefix ipv4SourcePrefix = new Ipv4Prefix(inetSourceAddressStr + "/32"); String inetDestAddressValue = InetAddresses .toAddrString(inetDestAddress); Ipv4Prefix ipv4DestPrefix = new Ipv4Prefix(inetDestAddressValue + "/32"); ArpMatchBuilder arpMatchBuilder = new ArpMatchBuilder(); arpMatchBuilder.setArpSourceTransportAddress(ipv4SourcePrefix); arpMatchBuilder.setArpTargetTransportAddress(ipv4DestPrefix); ArpSourceHardwareAddressBuilder arpSourceHardwareAddressBuilder = new ArpSourceHardwareAddressBuilder(); arpSourceHardwareAddressBuilder .setAddress(ethernetSourceAddress(sourceMatch)); arpMatchBuilder .setArpSourceHardwareAddress(arpSourceHardwareAddressBuilder .build()); ArpTargetHardwareAddressBuilder arpTargetHardwareAddressBuilder = new ArpTargetHardwareAddressBuilder(); arpTargetHardwareAddressBuilder .setAddress(ethernetDestAddress(sourceMatch)); arpMatchBuilder .setArpTargetHardwareAddress(arpTargetHardwareAddressBuilder .build()); return arpMatchBuilder.build(); }
final ArpMatchBuilder arpmatch3 = new ArpMatchBuilder(); final ArpMatchBuilder arpmatch4 = new ArpMatchBuilder(); final ArpSourceHardwareAddressBuilder arpsrc = new ArpSourceHardwareAddressBuilder(); arpsrc.setAddress(macsrc); final ArpTargetHardwareAddressBuilder arpdst = new ArpTargetHardwareAddressBuilder();
final ArpSourceHardwareAddressBuilder arpsrc = new ArpSourceHardwareAddressBuilder(); arpsrc.setAddress(macsrc); arpsrc.setMask(new MacAddress("ff:ff:ff:00:00:00"));