// Path: src/main/java/com/github/ffalcinelli/jdivert/Enums.java
// public enum Protocol {
//     HOPOPT(0), ICMP(1), TCP(6), UDP(17), ROUTING(43), FRAGMENT(44), AH(51), ICMPV6(58), NONE(59), DSTOPTS(60);
//     private int value;
// 
//     Protocol(int value) {
//         this.value = value;
//     }
// 
//     public static Protocol fromValue(int value) {
//         for (Protocol protocol : Protocol.values()) {
//             if (protocol.getValue() == value)
//                 return protocol;
//         }
//         throw new IllegalArgumentException(String.format("Protocol %d is not recognized", value));
//     }
// 
//     public int getValue() {
//         return value;
//     }
// }


import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import static com.github.ffalcinelli.jdivert.Enums.Protocol;
            return null;
        }
    }

    public void setDstAddr(T address) {
        setInetAddressAtOffset(dstAddrOffset, address);
    }

    public String getSrcAddrStr() {
        InetAddress address = getSrcAddr();
        return address != null ? address.getHostAddress() : null;
    }

    public void setSrcAddrStr(String srcAddr) throws UnknownHostException {
        setSrcAddr((T) InetAddress.getByName(srcAddr));
    }

    public String getDstAddrStr() {
        InetAddress address = getDstAddr();
        return address != null ? address.getHostAddress() : null;
    }

    public void setDstAddrStr(String dstAddr) throws UnknownHostException {
        setDstAddr((T) InetAddress.getByName(dstAddr));
    }

    public int getVersion() {
        return raw.get(0) >> 4;
    }

// Path: src/main/java/com/github/ffalcinelli/jdivert/Enums.java
// public enum Protocol {
//     HOPOPT(0), ICMP(1), TCP(6), UDP(17), ROUTING(43), FRAGMENT(44), AH(51), ICMPV6(58), NONE(59), DSTOPTS(60);
//     private int value;
// 
//     Protocol(int value) {
//         this.value = value;
//     }
// 
//     public static Protocol fromValue(int value) {
//         for (Protocol protocol : Protocol.values()) {
//             if (protocol.getValue() == value)
//                 return protocol;
//         }
//         throw new IllegalArgumentException(String.format("Protocol %d is not recognized", value));
//     }
// 
//     public int getValue() {
//         return value;
//     }
// }


// Path: src/main/java/com/github/ffalcinelli/jdivert/headers/Ip.java
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import static com.github.ffalcinelli.jdivert.Enums.Protocol;

            return null;
        }
    }

    public void setDstAddr(T address) {
        setInetAddressAtOffset(dstAddrOffset, address);
    }

    public String getSrcAddrStr() {
        InetAddress address = getSrcAddr();
        return address != null ? address.getHostAddress() : null;
    }

    public void setSrcAddrStr(String srcAddr) throws UnknownHostException {
        setSrcAddr((T) InetAddress.getByName(srcAddr));
    }

    public String getDstAddrStr() {
        InetAddress address = getDstAddr();
        return address != null ? address.getHostAddress() : null;
    }

    public void setDstAddrStr(String dstAddr) throws UnknownHostException {
        setDstAddr((T) InetAddress.getByName(dstAddr));
    }

    public int getVersion() {
        return raw.get(0) >> 4;
    }

    public abstract Protocol getNextHeaderProtocol();