package org.wfc.omada.api.sitesetting.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.Objects;

/**
 * AttackDefenseSetting
 */
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2024-12-04T11:32:19.054+08:00[Asia/Shanghai]")

public class AttackDefenseSetting   {
  @JsonProperty("tcpConnEnable")
  private Boolean tcpConnEnable;

  @JsonProperty("tcpConnLimit")
  private Integer tcpConnLimit;

  @JsonProperty("udpConnEnable")
  private Boolean udpConnEnable;

  @JsonProperty("udpConnLimit")
  private Integer udpConnLimit;

  @JsonProperty("icmpConnEnable")
  private Boolean icmpConnEnable;

  @JsonProperty("icmpConnLimit")
  private Integer icmpConnLimit;

  @JsonProperty("tcpSrcEnable")
  private Boolean tcpSrcEnable;

  @JsonProperty("tcpSrcLimit")
  private Integer tcpSrcLimit;

  @JsonProperty("udpSrcEnable")
  private Boolean udpSrcEnable;

  @JsonProperty("udpSrcLimit")
  private Integer udpSrcLimit;

  @JsonProperty("icmpSrcEnable")
  private Boolean icmpSrcEnable;

  @JsonProperty("icmpSrcLimit")
  private Integer icmpSrcLimit;

  @JsonProperty("tcpScanEnable")
  private Boolean tcpScanEnable;

  @JsonProperty("tcpScanReject")
  private Boolean tcpScanReject;

  @JsonProperty("pingDeathEnable")
  private Boolean pingDeathEnable;

  @JsonProperty("largePingEnable")
  private Boolean largePingEnable;

  @JsonProperty("pingWanEnable")
  private Boolean pingWanEnable;

  @JsonProperty("winNukeAttackEnable")
  private Boolean winNukeAttackEnable;

  @JsonProperty("tcpSynFinEnable")
  private Boolean tcpSynFinEnable;

  @JsonProperty("tcpFinNoAckEnable")
  private Boolean tcpFinNoAckEnable;

  @JsonProperty("specifiedOptionEnable")
  private Boolean specifiedOptionEnable;

  @JsonProperty("specifiedOption")
  private SpecifiedOptionOpenApiVo specifiedOption;

  public AttackDefenseSetting tcpConnEnable(Boolean tcpConnEnable) {
    this.tcpConnEnable = tcpConnEnable;
    return this;
  }

  /**
   * Multi-connections TCP SYN flood enable of the attack defense setting.
   * @return tcpConnEnable
  */
  @ApiModelProperty(required = true, value = "Multi-connections TCP SYN flood enable of the attack defense setting.")
  @NotNull


  public Boolean getTcpConnEnable() {
    return tcpConnEnable;
  }

  public void setTcpConnEnable(Boolean tcpConnEnable) {
    this.tcpConnEnable = tcpConnEnable;
  }

  public AttackDefenseSetting tcpConnLimit(Integer tcpConnLimit) {
    this.tcpConnLimit = tcpConnLimit;
    return this;
  }

  /**
   * Multi-connections TCP SYN flood limit should be within the range of 100–99999.
   * @return tcpConnLimit
  */
  @ApiModelProperty(value = "Multi-connections TCP SYN flood limit should be within the range of 100–99999.")


  public Integer getTcpConnLimit() {
    return tcpConnLimit;
  }

  public void setTcpConnLimit(Integer tcpConnLimit) {
    this.tcpConnLimit = tcpConnLimit;
  }

  public AttackDefenseSetting udpConnEnable(Boolean udpConnEnable) {
    this.udpConnEnable = udpConnEnable;
    return this;
  }

  /**
   * Multi-connections UDP flood enable of the attack defense setting.
   * @return udpConnEnable
  */
  @ApiModelProperty(required = true, value = "Multi-connections UDP flood enable of the attack defense setting.")
  @NotNull


  public Boolean getUdpConnEnable() {
    return udpConnEnable;
  }

  public void setUdpConnEnable(Boolean udpConnEnable) {
    this.udpConnEnable = udpConnEnable;
  }

  public AttackDefenseSetting udpConnLimit(Integer udpConnLimit) {
    this.udpConnLimit = udpConnLimit;
    return this;
  }

  /**
   * Multi-connections UDP flood limit should be within the range of 100–99999.
   * @return udpConnLimit
  */
  @ApiModelProperty(value = "Multi-connections UDP flood limit should be within the range of 100–99999.")


  public Integer getUdpConnLimit() {
    return udpConnLimit;
  }

  public void setUdpConnLimit(Integer udpConnLimit) {
    this.udpConnLimit = udpConnLimit;
  }

  public AttackDefenseSetting icmpConnEnable(Boolean icmpConnEnable) {
    this.icmpConnEnable = icmpConnEnable;
    return this;
  }

  /**
   * Multi-connections ICMP flood enable of the attack defense setting.
   * @return icmpConnEnable
  */
  @ApiModelProperty(required = true, value = "Multi-connections ICMP flood enable of the attack defense setting.")
  @NotNull


  public Boolean getIcmpConnEnable() {
    return icmpConnEnable;
  }

  public void setIcmpConnEnable(Boolean icmpConnEnable) {
    this.icmpConnEnable = icmpConnEnable;
  }

  public AttackDefenseSetting icmpConnLimit(Integer icmpConnLimit) {
    this.icmpConnLimit = icmpConnLimit;
    return this;
  }

  /**
   * Multi-connections ICMP flood limit should be within the range of 100–99999.
   * @return icmpConnLimit
  */
  @ApiModelProperty(value = "Multi-connections ICMP flood limit should be within the range of 100–99999.")


  public Integer getIcmpConnLimit() {
    return icmpConnLimit;
  }

  public void setIcmpConnLimit(Integer icmpConnLimit) {
    this.icmpConnLimit = icmpConnLimit;
  }

  public AttackDefenseSetting tcpSrcEnable(Boolean tcpSrcEnable) {
    this.tcpSrcEnable = tcpSrcEnable;
    return this;
  }

  /**
   * Stationary source TCP SYN flood enable of the attack defense setting.
   * @return tcpSrcEnable
  */
  @ApiModelProperty(required = true, value = "Stationary source TCP SYN flood enable of the attack defense setting.")
  @NotNull


  public Boolean getTcpSrcEnable() {
    return tcpSrcEnable;
  }

  public void setTcpSrcEnable(Boolean tcpSrcEnable) {
    this.tcpSrcEnable = tcpSrcEnable;
  }

  public AttackDefenseSetting tcpSrcLimit(Integer tcpSrcLimit) {
    this.tcpSrcLimit = tcpSrcLimit;
    return this;
  }

  /**
   * Stationary source TCP SYN flood limit should be within the range of 100–99999.
   * @return tcpSrcLimit
  */
  @ApiModelProperty(value = "Stationary source TCP SYN flood limit should be within the range of 100–99999.")


  public Integer getTcpSrcLimit() {
    return tcpSrcLimit;
  }

  public void setTcpSrcLimit(Integer tcpSrcLimit) {
    this.tcpSrcLimit = tcpSrcLimit;
  }

  public AttackDefenseSetting udpSrcEnable(Boolean udpSrcEnable) {
    this.udpSrcEnable = udpSrcEnable;
    return this;
  }

  /**
   * Stationary source UDP flood enable of the attack defense setting.
   * @return udpSrcEnable
  */
  @ApiModelProperty(required = true, value = "Stationary source UDP flood enable of the attack defense setting.")
  @NotNull


  public Boolean getUdpSrcEnable() {
    return udpSrcEnable;
  }

  public void setUdpSrcEnable(Boolean udpSrcEnable) {
    this.udpSrcEnable = udpSrcEnable;
  }

  public AttackDefenseSetting udpSrcLimit(Integer udpSrcLimit) {
    this.udpSrcLimit = udpSrcLimit;
    return this;
  }

  /**
   * Stationary source UDP flood limit should be within the range of 100–99999.
   * @return udpSrcLimit
  */
  @ApiModelProperty(value = "Stationary source UDP flood limit should be within the range of 100–99999.")


  public Integer getUdpSrcLimit() {
    return udpSrcLimit;
  }

  public void setUdpSrcLimit(Integer udpSrcLimit) {
    this.udpSrcLimit = udpSrcLimit;
  }

  public AttackDefenseSetting icmpSrcEnable(Boolean icmpSrcEnable) {
    this.icmpSrcEnable = icmpSrcEnable;
    return this;
  }

  /**
   * Stationary source ICMP flood enable of the attack defense setting.
   * @return icmpSrcEnable
  */
  @ApiModelProperty(required = true, value = "Stationary source ICMP flood enable of the attack defense setting.")
  @NotNull


  public Boolean getIcmpSrcEnable() {
    return icmpSrcEnable;
  }

  public void setIcmpSrcEnable(Boolean icmpSrcEnable) {
    this.icmpSrcEnable = icmpSrcEnable;
  }

  public AttackDefenseSetting icmpSrcLimit(Integer icmpSrcLimit) {
    this.icmpSrcLimit = icmpSrcLimit;
    return this;
  }

  /**
   * Stationary source ICMP flood limit should be within the range of 100–99999.
   * @return icmpSrcLimit
  */
  @ApiModelProperty(value = "Stationary source ICMP flood limit should be within the range of 100–99999.")


  public Integer getIcmpSrcLimit() {
    return icmpSrcLimit;
  }

  public void setIcmpSrcLimit(Integer icmpSrcLimit) {
    this.icmpSrcLimit = icmpSrcLimit;
  }

  public AttackDefenseSetting tcpScanEnable(Boolean tcpScanEnable) {
    this.tcpScanEnable = tcpScanEnable;
    return this;
  }

  /**
   * Block TCP scan enable of the attack defense setting.
   * @return tcpScanEnable
  */
  @ApiModelProperty(required = true, value = "Block TCP scan enable of the attack defense setting.")
  @NotNull


  public Boolean getTcpScanEnable() {
    return tcpScanEnable;
  }

  public void setTcpScanEnable(Boolean tcpScanEnable) {
    this.tcpScanEnable = tcpScanEnable;
  }

  public AttackDefenseSetting tcpScanReject(Boolean tcpScanReject) {
    this.tcpScanReject = tcpScanReject;
    return this;
  }

  /**
   * Block TCP scan with reject of the attack defense setting.
   * @return tcpScanReject
  */
  @ApiModelProperty(value = "Block TCP scan with reject of the attack defense setting.")


  public Boolean getTcpScanReject() {
    return tcpScanReject;
  }

  public void setTcpScanReject(Boolean tcpScanReject) {
    this.tcpScanReject = tcpScanReject;
  }

  public AttackDefenseSetting pingDeathEnable(Boolean pingDeathEnable) {
    this.pingDeathEnable = pingDeathEnable;
    return this;
  }

  /**
   * Block ping of death of the attack defense setting.
   * @return pingDeathEnable
  */
  @ApiModelProperty(required = true, value = "Block ping of death of the attack defense setting.")
  @NotNull


  public Boolean getPingDeathEnable() {
    return pingDeathEnable;
  }

  public void setPingDeathEnable(Boolean pingDeathEnable) {
    this.pingDeathEnable = pingDeathEnable;
  }

  public AttackDefenseSetting largePingEnable(Boolean largePingEnable) {
    this.largePingEnable = largePingEnable;
    return this;
  }

  /**
   * Block large ping of the attack defense setting.
   * @return largePingEnable
  */
  @ApiModelProperty(required = true, value = "Block large ping of the attack defense setting.")
  @NotNull


  public Boolean getLargePingEnable() {
    return largePingEnable;
  }

  public void setLargePingEnable(Boolean largePingEnable) {
    this.largePingEnable = largePingEnable;
  }

  public AttackDefenseSetting pingWanEnable(Boolean pingWanEnable) {
    this.pingWanEnable = pingWanEnable;
    return this;
  }

  /**
   * Block ping from WAN of the attack defense setting.
   * @return pingWanEnable
  */
  @ApiModelProperty(required = true, value = "Block ping from WAN of the attack defense setting.")
  @NotNull


  public Boolean getPingWanEnable() {
    return pingWanEnable;
  }

  public void setPingWanEnable(Boolean pingWanEnable) {
    this.pingWanEnable = pingWanEnable;
  }

  public AttackDefenseSetting winNukeAttackEnable(Boolean winNukeAttackEnable) {
    this.winNukeAttackEnable = winNukeAttackEnable;
    return this;
  }

  /**
   * Block WinNuke attack of the attack defense setting.
   * @return winNukeAttackEnable
  */
  @ApiModelProperty(required = true, value = "Block WinNuke attack of the attack defense setting.")
  @NotNull


  public Boolean getWinNukeAttackEnable() {
    return winNukeAttackEnable;
  }

  public void setWinNukeAttackEnable(Boolean winNukeAttackEnable) {
    this.winNukeAttackEnable = winNukeAttackEnable;
  }

  public AttackDefenseSetting tcpSynFinEnable(Boolean tcpSynFinEnable) {
    this.tcpSynFinEnable = tcpSynFinEnable;
    return this;
  }

  /**
   * Block TCP packets with SYN and FIN Bits set of the attack defense setting.
   * @return tcpSynFinEnable
  */
  @ApiModelProperty(required = true, value = "Block TCP packets with SYN and FIN Bits set of the attack defense setting.")
  @NotNull


  public Boolean getTcpSynFinEnable() {
    return tcpSynFinEnable;
  }

  public void setTcpSynFinEnable(Boolean tcpSynFinEnable) {
    this.tcpSynFinEnable = tcpSynFinEnable;
  }

  public AttackDefenseSetting tcpFinNoAckEnable(Boolean tcpFinNoAckEnable) {
    this.tcpFinNoAckEnable = tcpFinNoAckEnable;
    return this;
  }

  /**
   * Block TCP packets with FIN Bit set but no ACK Bit set of the attack defense setting.
   * @return tcpFinNoAckEnable
  */
  @ApiModelProperty(required = true, value = "Block TCP packets with FIN Bit set but no ACK Bit set of the attack defense setting.")
  @NotNull


  public Boolean getTcpFinNoAckEnable() {
    return tcpFinNoAckEnable;
  }

  public void setTcpFinNoAckEnable(Boolean tcpFinNoAckEnable) {
    this.tcpFinNoAckEnable = tcpFinNoAckEnable;
  }

  public AttackDefenseSetting specifiedOptionEnable(Boolean specifiedOptionEnable) {
    this.specifiedOptionEnable = specifiedOptionEnable;
    return this;
  }

  /**
   * Block packets with specified options of the attack defense setting.
   * @return specifiedOptionEnable
  */
  @ApiModelProperty(required = true, value = "Block packets with specified options of the attack defense setting.")
  @NotNull


  public Boolean getSpecifiedOptionEnable() {
    return specifiedOptionEnable;
  }

  public void setSpecifiedOptionEnable(Boolean specifiedOptionEnable) {
    this.specifiedOptionEnable = specifiedOptionEnable;
  }

  public AttackDefenseSetting specifiedOption(SpecifiedOptionOpenApiVo specifiedOption) {
    this.specifiedOption = specifiedOption;
    return this;
  }

  /**
   * Get specifiedOption
   * @return specifiedOption
  */
  @ApiModelProperty(value = "")

  @Valid

  public SpecifiedOptionOpenApiVo getSpecifiedOption() {
    return specifiedOption;
  }

  public void setSpecifiedOption(SpecifiedOptionOpenApiVo specifiedOption) {
    this.specifiedOption = specifiedOption;
  }


  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    AttackDefenseSetting attackDefenseSetting = (AttackDefenseSetting) o;
    return Objects.equals(this.tcpConnEnable, attackDefenseSetting.tcpConnEnable) &&
        Objects.equals(this.tcpConnLimit, attackDefenseSetting.tcpConnLimit) &&
        Objects.equals(this.udpConnEnable, attackDefenseSetting.udpConnEnable) &&
        Objects.equals(this.udpConnLimit, attackDefenseSetting.udpConnLimit) &&
        Objects.equals(this.icmpConnEnable, attackDefenseSetting.icmpConnEnable) &&
        Objects.equals(this.icmpConnLimit, attackDefenseSetting.icmpConnLimit) &&
        Objects.equals(this.tcpSrcEnable, attackDefenseSetting.tcpSrcEnable) &&
        Objects.equals(this.tcpSrcLimit, attackDefenseSetting.tcpSrcLimit) &&
        Objects.equals(this.udpSrcEnable, attackDefenseSetting.udpSrcEnable) &&
        Objects.equals(this.udpSrcLimit, attackDefenseSetting.udpSrcLimit) &&
        Objects.equals(this.icmpSrcEnable, attackDefenseSetting.icmpSrcEnable) &&
        Objects.equals(this.icmpSrcLimit, attackDefenseSetting.icmpSrcLimit) &&
        Objects.equals(this.tcpScanEnable, attackDefenseSetting.tcpScanEnable) &&
        Objects.equals(this.tcpScanReject, attackDefenseSetting.tcpScanReject) &&
        Objects.equals(this.pingDeathEnable, attackDefenseSetting.pingDeathEnable) &&
        Objects.equals(this.largePingEnable, attackDefenseSetting.largePingEnable) &&
        Objects.equals(this.pingWanEnable, attackDefenseSetting.pingWanEnable) &&
        Objects.equals(this.winNukeAttackEnable, attackDefenseSetting.winNukeAttackEnable) &&
        Objects.equals(this.tcpSynFinEnable, attackDefenseSetting.tcpSynFinEnable) &&
        Objects.equals(this.tcpFinNoAckEnable, attackDefenseSetting.tcpFinNoAckEnable) &&
        Objects.equals(this.specifiedOptionEnable, attackDefenseSetting.specifiedOptionEnable) &&
        Objects.equals(this.specifiedOption, attackDefenseSetting.specifiedOption);
  }

  @Override
  public int hashCode() {
    return Objects.hash(tcpConnEnable, tcpConnLimit, udpConnEnable, udpConnLimit, icmpConnEnable, icmpConnLimit, tcpSrcEnable, tcpSrcLimit, udpSrcEnable, udpSrcLimit, icmpSrcEnable, icmpSrcLimit, tcpScanEnable, tcpScanReject, pingDeathEnable, largePingEnable, pingWanEnable, winNukeAttackEnable, tcpSynFinEnable, tcpFinNoAckEnable, specifiedOptionEnable, specifiedOption);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class AttackDefenseSetting {\n");
    
    sb.append("    tcpConnEnable: ").append(toIndentedString(tcpConnEnable)).append("\n");
    sb.append("    tcpConnLimit: ").append(toIndentedString(tcpConnLimit)).append("\n");
    sb.append("    udpConnEnable: ").append(toIndentedString(udpConnEnable)).append("\n");
    sb.append("    udpConnLimit: ").append(toIndentedString(udpConnLimit)).append("\n");
    sb.append("    icmpConnEnable: ").append(toIndentedString(icmpConnEnable)).append("\n");
    sb.append("    icmpConnLimit: ").append(toIndentedString(icmpConnLimit)).append("\n");
    sb.append("    tcpSrcEnable: ").append(toIndentedString(tcpSrcEnable)).append("\n");
    sb.append("    tcpSrcLimit: ").append(toIndentedString(tcpSrcLimit)).append("\n");
    sb.append("    udpSrcEnable: ").append(toIndentedString(udpSrcEnable)).append("\n");
    sb.append("    udpSrcLimit: ").append(toIndentedString(udpSrcLimit)).append("\n");
    sb.append("    icmpSrcEnable: ").append(toIndentedString(icmpSrcEnable)).append("\n");
    sb.append("    icmpSrcLimit: ").append(toIndentedString(icmpSrcLimit)).append("\n");
    sb.append("    tcpScanEnable: ").append(toIndentedString(tcpScanEnable)).append("\n");
    sb.append("    tcpScanReject: ").append(toIndentedString(tcpScanReject)).append("\n");
    sb.append("    pingDeathEnable: ").append(toIndentedString(pingDeathEnable)).append("\n");
    sb.append("    largePingEnable: ").append(toIndentedString(largePingEnable)).append("\n");
    sb.append("    pingWanEnable: ").append(toIndentedString(pingWanEnable)).append("\n");
    sb.append("    winNukeAttackEnable: ").append(toIndentedString(winNukeAttackEnable)).append("\n");
    sb.append("    tcpSynFinEnable: ").append(toIndentedString(tcpSynFinEnable)).append("\n");
    sb.append("    tcpFinNoAckEnable: ").append(toIndentedString(tcpFinNoAckEnable)).append("\n");
    sb.append("    specifiedOptionEnable: ").append(toIndentedString(specifiedOptionEnable)).append("\n");
    sb.append("    specifiedOption: ").append(toIndentedString(specifiedOption)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }
}

