{
  "description": "BGPConfiguration contains the configuration for any BGP routing.",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": "string"
    },
    "kind": {
      "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "BGPConfigurationSpec contains the values of the BGP configuration.",
      "properties": {
        "asNumber": {
          "description": "ASNumber is the default AS number used by a node. [Default: 64512]",
          "format": "int32",
          "type": "integer"
        },
        "bindMode": {
          "description": "BindMode indicates whether to listen for BGP connections on all addresses (None)\nor only on the node's canonical IP address Node.Spec.BGP.IPvXAddress (NodeIP).\nDefault behaviour is to listen for BGP connections on all addresses.",
          "type": "string"
        },
        "communities": {
          "description": "Communities is a list of BGP community values and their arbitrary names for tagging routes.",
          "items": {
            "description": "Community contains standard or large community value and its name.",
            "properties": {
              "name": {
                "description": "Name given to community value.",
                "type": "string"
              },
              "value": {
                "description": "Value must be of format `aa:nn` or `aa:nn:mm`.\nFor standard community use `aa:nn` format, where `aa` and `nn` are 16 bit number.\nFor large community use `aa:nn:mm` format, where `aa`, `nn` and `mm` are 32 bit number.\nWhere, `aa` is an AS Number, `nn` and `mm` are per-AS identifier.",
                "pattern": "^(\\d+):(\\d+)$|^(\\d+):(\\d+):(\\d+)$",
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "ignoredInterfaces": {
          "description": "IgnoredInterfaces indicates the network interfaces that needs to be excluded when reading device routes.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "listenPort": {
          "description": "ListenPort is the port where BGP protocol should listen. Defaults to 179",
          "maximum": 65535,
          "minimum": 1,
          "type": "integer"
        },
        "localWorkloadPeeringIPV4": {
          "description": "The virtual IPv4 address of the node with which its local workload is expected to peer.\nIt is recommended to use a link-local address.",
          "type": "string"
        },
        "localWorkloadPeeringIPV6": {
          "description": "The virtual IPv6 address of the node with which its local workload is expected to peer.\nIt is recommended to use a link-local address.",
          "type": "string"
        },
        "logSeverityScreen": {
          "description": "LogSeverityScreen is the log severity above which logs are sent to the stdout. [Default: INFO]",
          "type": "string"
        },
        "nodeMeshMaxRestartTime": {
          "description": "Time to allow for software restart for node-to-mesh peerings.  When specified, this is configured\nas the graceful restart timeout.  When not specified, the BIRD default of 120s is used.\nThis field can only be set on the default BGPConfiguration instance and requires that NodeMesh is enabled",
          "type": "string"
        },
        "nodeMeshPassword": {
          "description": "Optional BGP password for full node-to-mesh peerings.\nThis field can only be set on the default BGPConfiguration instance and requires that NodeMesh is enabled",
          "properties": {
            "secretKeyRef": {
              "description": "Selects a key of a secret in the node pod's namespace.",
              "properties": {
                "key": {
                  "description": "The key of the secret to select from.  Must be a valid secret key.",
                  "type": "string"
                },
                "name": {
                  "default": "",
                  "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                  "type": "string"
                },
                "optional": {
                  "description": "Specify whether the Secret or its key must be defined",
                  "type": "boolean"
                }
              },
              "required": [
                "key"
              ],
              "type": "object",
              "x-kubernetes-map-type": "atomic",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "nodeToNodeMeshEnabled": {
          "description": "NodeToNodeMeshEnabled sets whether full node to node BGP mesh is enabled. [Default: true]",
          "type": "boolean"
        },
        "prefixAdvertisements": {
          "description": "PrefixAdvertisements contains per-prefix advertisement configuration.",
          "items": {
            "description": "PrefixAdvertisement configures advertisement properties for the specified CIDR.",
            "properties": {
              "cidr": {
                "description": "CIDR for which properties should be advertised.",
                "type": "string"
              },
              "communities": {
                "description": "Communities can be list of either community names already defined in `Specs.Communities` or community value of format `aa:nn` or `aa:nn:mm`.\nFor standard community use `aa:nn` format, where `aa` and `nn` are 16 bit number.\nFor large community use `aa:nn:mm` format, where `aa`, `nn` and `mm` are 32 bit number.\nWhere,`aa` is an AS Number, `nn` and `mm` are per-AS identifier.",
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "serviceClusterIPs": {
          "description": "ServiceClusterIPs are the CIDR blocks from which service cluster IPs are allocated.\nIf specified, Calico will advertise these blocks, as well as any cluster IPs within them.",
          "items": {
            "description": "ServiceClusterIPBlock represents a single allowed ClusterIP CIDR block.",
            "properties": {
              "cidr": {
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "serviceExternalIPs": {
          "description": "ServiceExternalIPs are the CIDR blocks for Kubernetes Service External IPs.\nKubernetes Service ExternalIPs will only be advertised if they are within one of these blocks.",
          "items": {
            "description": "ServiceExternalIPBlock represents a single allowed External IP CIDR block.",
            "properties": {
              "cidr": {
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "serviceLoadBalancerIPs": {
          "description": "ServiceLoadBalancerIPs are the CIDR blocks for Kubernetes Service LoadBalancer IPs.\nKubernetes Service status.LoadBalancer.Ingress IPs will only be advertised if they are within one of these blocks.",
          "items": {
            "description": "ServiceLoadBalancerIPBlock represents a single allowed LoadBalancer IP CIDR block.",
            "properties": {
              "cidr": {
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
