# (C) Copyright 2014 Riverbed Technology, Inc. # All rights reserved. name: sh.common version: "1.0" title: 'SteelHead Common Type Definitions' description: 'REST API for SteelHead specific common data types' defaultAuthorization: 'none' $schema: 'http://support.riverbed.com/apis/service_def/2.2' id: 'http://support.riverbed.com/apis/sh.common/1.0' provider: 'riverbed' ############################################################################### # # Types # # ipv4address, ipv4prefix, ipv6address and ipv6prefix are from # http://blog.markhatton.co.uk/2011/03/15/regular-expressions-for-ip-addresses-cidr-ranges-and-hostnames/ # # some types are derived from lumberjack-svc-appflows and steelhead-svc-inpath # ############################################################################### types: ipv4address: description: > IPv4 address (x.y.z.k): A 32-bit IPv4 address in dotted-decimal format. It is described in IETF publication RFC791. type: string pattern: '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$' minLength: 7 maxLength: 15 ipv4prefix: description: > IPv4 prefix/subnet (x.y.z.k/<0-32>): A CIDR notion of IPv4 prefix/subnet representation that consists of an IPv4 address along with its routing prefix separated by a forward slash character("/"). type: string pattern: '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(\d|[1-2]\d|3[0-2]))$' minLength: 9 maxLength: 18 ipv6address: description: > IPv6 address (x:y:z::k): A 128-bit IPv6 address described in IETF publication RFC2460, RFC4291, RFC5952, RFC6052, RFC6145. type: string pattern: '^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$' minLength: 2 maxLength: 45 ipv6prefix: description: > IPv6 prefix/subnet (x:y:z::k/<0-128>): A CIDR notion of IPv6 prefix/subnet representation that consists of an IPv6 address along with its routing prefix separated by a forward slash character("/"). type: string pattern: '^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*(\/(\d|\d\d|1[0-1]\d|12[0-8]))$' minLength: 4 maxLength: 49 ipv4ipv6address: description: 'IPv4 or IPv6 address (x.y.z.k|x:y:z::k)' type: object additionalProperties: false properties: ipv4address: { $ref: '#/types/ipv4address' } ipv6address: { $ref: '#/types/ipv6address' } oneOf: - type: object required: [ ipv4address ] - type: object required: [ ipv6address ] ipv4ipv6prefix: description: 'IPv4 or IPv6 prefix/subnet (x.y.z.k/<0-32>|x:y:z::k/<0-128>)' type: object additionalProperties: false properties: ipv4prefix: { $ref: '#/types/ipv4prefix' } ipv6prefix: { $ref: '#/types/ipv6prefix' } oneOf: - type: object required: [ ipv4prefix ] - type: object required: [ ipv6prefix ] port: description: 'Valid port number' type: integer minimum: 0 maximum: 65535 portlabel: description: > A textual name assigned to a range of ports, for example the predefined port label "RBT-Proto" refers to ports in range of 7744, 7800-7801, 7810, 7820, 7850, 7860, 7870. type: string port_portlabel: description: 'Port number or port label' type: object additionalProperties: false properties: port: { $ref: '#/types/port' } portlabel: { $ref: '#/types/portlabel' } oneOf: - type: object required: [ port ] - type: object required: [ portlabel ] vlan_tag: description: 'VLAN tag (all, untagged, tagged - [1-4094])' type: object additionalProperties: false properties: state: description: 'The state of a VLAN tag.' type: string enum: [ all, untagged, tagged ] tag: description: 'The "tag" is valid if "state" == "tagged".' type: number minimum: 1 maximum: 4094 oneOf: - type: object required: [ state ] additionalProperties: false properties: state: type: string enum: [ all, untagged ] - type: object required: [ state, tag ] additionalProperties: false properties: state: type: string enum: [ tagged ] tag: type: number