openapi: 3.2.0 info: title: Cesnet Rules API version: '3.0' description: 'Operations tagged Rules across 2 of this provider''s published API definitions: cesnet-exafs-swagger.yml, cesnet-exafs-openapi.yml. Each path carries the servers of the definition it was published in.' security: - TokenAuth: [] tags: - name: Rules description: Endpoints for managing IPv4, IPv6, and RTBH rules. paths: /rules: get: tags: - Rules summary: Get all rules description: Returns all flow rules accessible to the authenticated user parameters: - name: time_format in: query required: false description: Preferred time format for dates in response schema: type: string responses: '200': description: List of all rules content: application/json: schema: type: object properties: flowspec_ipv4_rw: type: array items: $ref: '#/components/schemas/IPv4Rule' flowspec_ipv6_rw: type: array items: $ref: '#/components/schemas/IPv6Rule' rtbh_any_rw: type: array items: $ref: '#/components/schemas/RTBHRule' flowspec_ipv4_ro: type: array items: $ref: '#/components/schemas/IPv4Rule' flowspec_ipv6_ro: type: array items: $ref: '#/components/schemas/IPv6Rule' operationId: getRules x-operation-id-source: derived /rules/ipv4: post: tags: - Rules summary: Create IPv4 rule description: Create a new IPv4 flow rule responses: '201': description: Rule created successfully content: application/json: schema: type: object properties: message: type: string rule: $ref: '#/components/schemas/IPv4Rule' '400': description: Invalid input data '403': description: Rule limit reached or read-only token requestBody: content: application/json: schema: $ref: '#/components/schemas/IPv4RuleInput' required: true operationId: postRulesIpv4 x-operation-id-source: derived /rules/ipv6: post: tags: - Rules summary: Create IPv6 rule description: Create a new IPv6 flow rule responses: '201': description: Rule created successfully content: application/json: schema: type: object properties: message: type: string rule: $ref: '#/components/schemas/IPv6Rule' '400': description: Invalid input data '403': description: Rule limit reached or read-only token requestBody: content: application/json: schema: $ref: '#/components/schemas/IPv6RuleInput' required: true operationId: postRulesIpv6 x-operation-id-source: derived /rules/rtbh: post: tags: - Rules summary: Create RTBH rule description: Create a new RTBH rule responses: '201': description: Rule created successfully content: application/json: schema: type: object properties: message: type: string rule: $ref: '#/components/schemas/RTBHRule' '400': description: Invalid input data '403': description: Rule limit reached or read-only token requestBody: content: application/json: schema: $ref: '#/components/schemas/RTBHRuleInput' required: true operationId: postRulesRtbh x-operation-id-source: derived /rules/ipv4/{rule_id}: parameters: - name: rule_id in: path required: true description: ID of the IPv4 rule schema: type: integer get: tags: - Rules summary: Get IPv4 rule description: Get details of a specific IPv4 rule responses: '200': description: Rule details content: application/json: schema: $ref: '#/components/schemas/IPv4Rule' '401': description: Not allowed to view this rule '404': description: Rule not found operationId: getRulesIpv4ByRuleId x-operation-id-source: derived delete: tags: - Rules summary: Delete IPv4 rule description: Delete a specific IPv4 rule responses: '201': description: Rule deleted successfully '401': description: Not allowed to delete this rule '403': description: Read-only token '404': description: Rule not found operationId: deleteRulesIpv4ByRuleId x-operation-id-source: derived /rules/ipv6/{rule_id}: parameters: - name: rule_id in: path required: true description: ID of the IPv6 rule schema: type: integer get: tags: - Rules summary: Get IPv6 rule description: Get details of a specific IPv6 rule responses: '200': description: Rule details content: application/json: schema: $ref: '#/components/schemas/IPv6Rule' '401': description: Not allowed to view this rule '404': description: Rule not found operationId: getRulesIpv6ByRuleId x-operation-id-source: derived delete: tags: - Rules summary: Delete IPv6 rule description: Delete a specific IPv6 rule responses: '201': description: Rule deleted successfully '401': description: Not allowed to delete this rule '403': description: Read-only token '404': description: Rule not found operationId: deleteRulesIpv6ByRuleId x-operation-id-source: derived /rules/rtbh/{rule_id}: parameters: - name: rule_id in: path required: true description: ID of the RTBH rule schema: type: integer get: tags: - Rules summary: Get RTBH rule description: Get details of a specific RTBH rule responses: '200': description: Rule details content: application/json: schema: $ref: '#/components/schemas/RTBHRule' '401': description: Not allowed to view this rule '404': description: Rule not found operationId: getRulesRtbhByRuleId x-operation-id-source: derived delete: tags: - Rules summary: Delete RTBH rule description: Delete a specific RTBH rule responses: '201': description: Rule deleted successfully '401': description: Not allowed to delete this rule '403': description: Read-only token '404': description: Rule not found operationId: deleteRulesRtbhByRuleId x-operation-id-source: derived components: schemas: IPv4Rule: allOf: - $ref: '#/components/schemas/IPv4RuleInput' - type: object properties: id: type: integer rstate_id: type: integer user_id: type: integer org_id: type: integer RTBHRuleInput: type: object required: - expires - community properties: ipv4: type: string description: IPv4 address ipv4_mask: type: integer description: IPv4 network mask ipv6: type: string description: IPv6 address ipv6_mask: type: integer description: IPv6 network mask community: type: integer description: Community ID expires: type: string format: date-time description: Rule expiration time comment: type: string description: Rule comment IPv4RuleInput: type: object required: - source - source_mask - dest - dest_mask - expires - action properties: source: type: string description: Source IP address source_mask: type: integer description: Source network mask source_port: type: string description: Source port(s) dest: type: string description: Destination IP address dest_mask: type: integer description: Destination network mask destination_port: type: string description: Destination port(s) protocol: type: string description: Protocol flags: type: array items: type: string description: TCP flags packet_len: type: string description: Packet length fragment: type: array items: type: string description: Fragment types expires: type: string format: date-time description: Rule expiration time comment: type: string description: Rule comment action: type: integer description: Action ID RTBHRule: allOf: - $ref: '#/components/schemas/RTBHRuleInput' - type: object properties: id: type: integer rstate_id: type: integer user_id: type: integer org_id: type: integer IPv6Rule: allOf: - $ref: '#/components/schemas/IPv6RuleInput' - type: object properties: id: type: integer rstate_id: type: integer user_id: type: integer org_id: type: integer IPv6RuleInput: type: object required: - source - source_mask - dest - dest_mask - expires - action properties: source: type: string description: Source IPv6 address source_mask: type: integer description: Source network mask source_port: type: string description: Source port(s) dest: type: string description: Destination IPv6 address dest_mask: type: integer description: Destination network mask destination_port: type: string description: Destination port(s) next_header: type: string description: Next header flags: type: array items: type: string description: TCP flags packet_len: type: string description: Packet length expires: type: string format: date-time description: Rule expiration time comment: type: string description: Rule comment action: type: integer description: Action ID securitySchemes: ApiKeyAuth: type: apiKey in: header name: x-api-key description: API key for initial authentication TokenAuth: type: apiKey in: header name: x-access-token description: auth token received from /auth endpoint x-refined-from: - cesnet-exafs-swagger.yml - cesnet-exafs-openapi.yml