/*_########################################################################## _## _## Copyright (C) 2013 Kaito Yamada _## _########################################################################## */ package com.github.kaitoy.sneo.network.protocol; import org.pcap4j.packet.Dot1qVlanTagPacket; import org.pcap4j.packet.EthernetPacket; import org.pcap4j.packet.Packet; import org.pcap4j.packet.SimpleBuilder; import org.pcap4j.packet.namednumber.EtherType; public final class Dot1qVlanTagHelper { private Dot1qVlanTagHelper() { throw new AssertionError(); } public static Packet tag(Packet packet, int vid) { EthernetPacket ep = packet.get(EthernetPacket.class); if (ep == null) { return packet; } Dot1qVlanTagPacket.Builder vb = new Dot1qVlanTagPacket.Builder(); vb.vid((short)vid) .type(ep.getHeader().getType()) .payloadBuilder(new SimpleBuilder(ep.getPayload())); Packet.Builder pb = packet.getBuilder(); pb.get(EthernetPacket.Builder.class) .type(EtherType.DOT1Q_VLAN_TAGGED_FRAMES) .payloadBuilder(vb); return pb.build(); } public static Packet untag(Packet packet) { Dot1qVlanTagPacket vp = packet.get(Dot1qVlanTagPacket.class); if (vp == null) { return packet; } Packet.Builder pb = packet.getBuilder(); pb.get(EthernetPacket.Builder.class) .type(vp.getHeader().getType()) .payloadBuilder(new SimpleBuilder(vp.getPayload())); return pb.build(); } public static boolean isTagged(Packet packet, int vid) { Dot1qVlanTagPacket vp = packet.get(Dot1qVlanTagPacket.class); return vp == null ? false : vp.getHeader().getVidAsInt() == vid; } }