Section 5 of
RFC 8008 describes the Footprint & Capabilities Advertisement interface (FCI) Capability Advertisement object, which includes an array of CDNI footprint objects. Each such object has a footprint type and a footprint value, as described in
Section 4.2.2.2 of
RFC 8006. This document defines additional footprint types, beyond those mentioned in [
RFC 8006].
Section 4.3.8 of
RFC 8006 specifies the "countrycode" footprint type for listing [
ISO3166-1] alpha-2 codes. Using footprint objects of this type, one can define an FCI Capability Advertisement object footprint constraint that matches a specific country. This document defines the "subdivisioncode" simple data type as well as a footprint type, allowing the dCDN to define constraints that match geographic areas with better granularity, specifically using the [
ISO3166-2] country subdivision codes.
The "subdivisioncode" data type specified in
Section 2.1.1.1 describes a country-specific subdivision using a code as defined in [
ISO3166-2]. The data type is added to the list of data types described in
Section 4.3 of
RFC 8006 that are used as properties of CDNI Metadata objects.
An [
ISO3166-2] code in lowercase. Each code consists of two parts separated by a hyphen. As per [
ISO3166-2], the first part is the [
ISO3166-1] code of the country and the second part is a string of up to three alphanumeric characters.
-
Type:
-
String
-
Example country subdivision codes:
-
The "subdivisioncode" simple data type specified in
Section 2.1.1 is added to the data types listed as footprint types in
Section 4.2.2.2 of
RFC 8006.
Figure 1 is an example using a footprint object of type "subdivisioncode". The footprint object in this example creates a constraint that matches clients in the state of either New Jersey or New York, USA (ISO [
ISO3166-2] codes "US-NJ" and "US-NY", respectively).
{
"capabilities": [
{
"capability-type": <CDNI capability object type>,
"capability-value": <CDNI capability object>,
"footprints": [
{
"footprint-type": "subdivisioncode",
"footprint-value": ["us-nj", "us-ny"]
}
]
}
]
}
As described in
Section 5 of
RFC 8008, the FCI Capability Advertisement object includes an array of CDNI footprint objects. Appendix B of [
RFC 8008] specifies the semantics for Footprint Advertisement such that multiple footprint constraints are additive. This implies that the advertisement of different footprint types narrows the dCDN's candidacy cumulatively.
Sections
4.3.5 and
4.3.6 of [
RFC 8006] specify the "ipv4cidr" and the "ipv6cidr" footprint types, respectively, for listing IP unscoped address blocks. Using footprint objects of these types, one can define FCI Capability Advertisement object footprint constraints that match either IPv4 or IPv6 clients, but not both. This is due to the described "narrowing" semantic of the Footprint Objects array, as described in Appendix B of [
RFC 8008], that prevents the usage of these objects together to create a footprint constraint that matches IPv4 clients with IPv6 clients.
Figure 2 is an example attempting to create an object that matches IPv4 clients of subnet "192.0.2.0/24" as well as IPv6 clients of subnet "2001:db8::/32". Such a definition results in an empty list of clients, as the constraints are additives and a client address cannot be both IPv4 and IPv6.
{
"capabilities": [
{
"capability-type": <CDNI capability object type>,
"capability-value": <CDNI capability object>,
"footprints": [
{
"footprint-type": "ipv4cidr",
"footprint-value": ["192.0.2.0/24"]
},
{
"footprint-type": "ipv6cidr",
"footprint-value": ["2001:db8::/32"]
}
]
}
]
}
To overcome the described limitation and allow a list of footprint constraints that match both IPv4 and IPv6 client subnets, this document defines the "footprintunion" footprint type. This footprint type allows the collection of multiple footprint-objects into a unified object. Therefore, it resolves the above limitation and can be particularly applicable to unify semantically related objects: for example, an IPv4 CIDR together with an IPv6 CIDR or a country code together with a country subdivision code.
Note: to avoid implementation complexity, a "footprintunion"
MUST NOT list any "footprintunion" as a value. As a union of unions is simply a union, this syntactic restriction does not result with any semantic limitation.
The "footprintunion" data type is based on the footprint object already defined in
Section 4.2.2.2 of
RFC 8006. The footprint value for a "footprintunion" object is an array of footprint objects, where the footprint objects
MUST be of any footprint type other than "footprintunion".
The "footprintunion" data type specified in
Section 2.2.1 is added to the data types listed as footprint types in
Section 4.2.2.2 of
RFC 8006.
Figure 3 is an example using a footprint union combining both IPv4 and IPv6 client subnets.
{
"capabilities": [
{
"capability-type": <CDNI capability object type>,
"capability-value": <CDNI capability object>,
"footprints": [
{
"footprint-type": "footprintunion",
"footprint-value": [
{
"footprint-type": "ipv4cidr",
"footprint-value": ["192.0.2.0/24"]
},
{
"footprint-type": "ipv6cidr",
"footprint-value": ["2001:db8::/32"]
}
]
}
]
}
]
}
The footprint union also enables composing of footprint objects based on the country code and country subdivision code. In
Figure 4, we create a constraint covering autonomous system 64496 within the USA (ISO alpha-2 code "US" as described in [
ISO3166-1]) and the Ontario province of Canada (ISO code "CA-ON" as described in [
ISO3166-2]).
{
"capabilities": [
{
"capability-type": <CDNI capability object type>,
"capability-value": <CDNI capability object>,
"footprints": [
{
"footprint-type": "asn",
"footprint-value": ["as64496"]
},
{
"footprint-type": "footprintunion",
"footprint-value": [
{
"footprint-type": "countrycode",
"footprint-value": ["us"]
},
{
"footprint-type": "subdivisioncode",
"footprint-value": ["ca-on"]
}
]
}
]
}
]
}