class PacketHeaderConstraints {

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (!(o instanceof PacketHeaderConstraints)) {
      return false;
    }
    PacketHeaderConstraints that = (PacketHeaderConstraints) o;
    return Objects.equals(_dscps, that._dscps)
        && Objects.equals(_ecns, that._ecns)
        && Objects.equals(_packetLengths, that._packetLengths)
        && Objects.equals(_fragmentOffsets, that._fragmentOffsets)
        && Objects.equals(_ipProtocols, that._ipProtocols)
        && Objects.equals(_srcIp, that._srcIp)
        && Objects.equals(_dstIp, that._dstIp)
        && Objects.equals(_icmpCode, that._icmpCode)
        && Objects.equals(_icmpType, that._icmpType)
        && Objects.equals(_srcPorts, that._srcPorts)
        && Objects.equals(_dstPorts, that._dstPorts)
        && Objects.equals(_applications, that._applications)
        && Objects.equals(_tcpFlags, that._tcpFlags);
  }

  private  PacketHeaderConstraints(
      @Nullable IntegerSpace dscps,
      @Nullable IntegerSpace ecns,
      @Nullable IntegerSpace packetLengths,
      @Nullable IntegerSpace fragmentOffsets,
      @Nullable Set<IpProtocol> ipProtocols,
      @Nullable String srcIp,
      @Nullable String dstIp,
      @Nullable IntegerSpace icmpCode,
      @Nullable IntegerSpace icmpType,
      @Nullable IntegerSpace srcPorts,
      @Nullable IntegerSpace dstPorts,
      @Nullable String applications,
      @Nullable Set<TcpFlagsMatchConditions> tcpFlags);

}