Report Issue

BIER Developer Guide

BIER Architecture

  • Channel
    • Channel (multicast flow) configuration and deploying information management.
  • Common
    • Common YANG models collection.
  • Drivers
    • South-bound NETCONF interface for BIER, it has implemented standard interface (ietf-bier). If your BFR’s NETCONF interface is Non-standard, you should add your own interface for driver.
  • Sbi-Adapter
    • Adapter for different BIER south-bound NETCONF interfaces.
  • Service
    • Major processor function for BIER.
  • Bierman
    • BIER topology management, and BIER information (BIER, BIER-TE, lable info) configuration.
  • Pce
    • Path computation element for BIER-TE.
  • Bierapp
    • BIER UI, show topology and configure BIER/BIER-TE and channel.

APIs in BIER

The sections below give details about the configuration settings for the components that can be configured.

BIER Information Manager

API Description

  • bier/bierman/api/src/main/yang/bier-topology-api.yang
    • load-topology
      • Load BIER topology, and list all topo-name in all BIER topologies.
    • configure-domain
      • Configure domain in given BIER topology.
    • configure-subdomain
      • Configure sub-domain in given BIER domain and topology.
    • delete-domain
      • Delete given domain in given topology.
    • delete-subdomain
      • Delete given sub-domain in given domain and topology.
    • query-topology
      • Query given topology in BIER topology, and then display this topology’s detail, such as information of node and link.
    • query-node
      • Query given nodes in given topology, and then display these nodes’ detail, such as information of node-name, router-id, termination-point list, BIER domain and sub-domain list, etc.
    • query-link
      • Query given link in given topology, and then display this link’s detail.
    • query-domain
      • Query domain in given BIER topology, and then display the domain-id list.
    • query-subdomain
      • Query sub-domain in given domain and given topology, and then display the sub-domain-id list.
    • query-subdomain-node
      • Query nodes which have been assigned to given sub-domain and domain in given topology, and then display these nodes’ details.
    • query-subdomain-link
      • Query links which have been assigned to given sub-domain and domain in given topology, and then display these links’ details.
    • query-te-subdomain-node
      • Query te-nodes which have been assigned to given sub-domain and domain in given topology, and then display these te-nodes’ details.
    • query-te-subdomain-link
      • Query te-links which have been assigned to given sub-domain and domain in given topology, and then display these te-links’ details.
  • bier/bierman/api/src/main/yang/bier-config-api.yang
    • configure-node
      • Configure node information in given topology, which defined in ietf-bier, such as domains, sub-domains, bitstringlength, bfr-id, encapsulation-type, etc.
    • delete-node
      • Delete given node which be assigned to given sub-domain and domain in given topology.
    • delete-ipv4
      • Delete bier mapping entry of ipv4.
    • delete-ipv6
      • Delete bier mapping entry of ipv6.
  • bier/bierman/api/src/main/yang/bier-te-config-api.yang
    • configure-te-node
      • Configure adjancency information for node, such as domains, sub-domains, si, bitstringlength, tpid, bitposition, etc.
    • configure-te-label
      • Configure BIER-TE label range for node.
    • delete-te-babel
      • Delete BIER-TE label range of node.
    • delete-te-bsl
      • Delete BIER-TE bitstringlength, including all SIs which belongs to this bitstringlenght.
    • delete-te-si
      • Delete BIER-TE SI, including all bitpositions which belongs to this SI.
    • delete-te-bp
      • Delete BIER-TE bitposition of an adjancency.

Parameters Description

  • topology-id
    • BIER topology identifier.
  • node-id
    • Node identifier in network topology.
  • latitude
    • Node’s latitude, default value is 0.
  • longitude
    • Node’s longitude, default value is 0.
  • tp-id
    • Termination point identifier.
  • domain-id
    • BIER domain identifier.
  • encapsulation-type
    • Base identity for BIER encapsulation. Default value is “bier-encapsulation-mpls”.
  • bitstringlength
    • The bitstringlength type for imposition mode. It’s value can be chosen from 64, 128, 256, 512, 1024, 2048, and 4096.
    • The BitStringLength (“Imposition BitStringLength”) and sub-domain (“Imposition sub-domain”) to use when it imposes (as a BFIR) a BIER encapsulation on a particular set of packets.
  • bfr-id
    • BIER bfr identifier. BFR-id is a number in the range [1, 65535].
    • Bfr-id is unique within the sub-domain. A BFR-id is a small unstructured positive integer. For instance, if a particular BIER sub-domain contains 1, 374 BFRs, each one could be given a BFR-id in the range 1-1374.
    • If a given BFR belongs to more than one sub-domain, it may (though it need not) have a different BFR-id for each sub-domain.
  • ipv4-bfr-prefix
    • BIER BFR IPv4 prefix.
    • A BFR’s BFR-Prefix MUST be an IP address (either IPv4 or IPv6) of the BFR, and MUST be unique and routable within the BIER domain. It is RECOMMENDED that the BFR-prefix be a loopback address of the BFR. Two BFRs in the same BIER domain MUST NOT be assigned the same BFR-Prefix. Note that a BFR in a given BIER domain has the same BFR-prefix in all the sub-domains of that BIER domain.
  • ipv6-bfr-prefix
    • BIER BFR IPv6 prefix.
  • sub-domain-id
    • Sub-domain identifier. Each sub-domain is identified by a sub-domain-id in the range [0, 255].
    • A BIER domain may contain one or more sub-domains. Each BIER domain MUST contain at least one sub-domain, the “default sub-domain” (also denoted “sub-domain zero”). If a BIER domain contains more than one sub-domain, each BFR in the domain MUST be provisioned to know the set of sub-domains to which it belongs.
  • igp-type
    • The IGP type. Enum type contains OSPF and ISIS.
  • mt-id
    • Multi-topology associated with BIER sub-domain.
  • bitstringlength
    • Disposition bitstringlength.
    • The BitStringLengths (“Disposition BitStringLengths”) that it will process when (as a BFR or BFER) it receives packets from a particular sub-domain.
  • bier-mpls-label-base
    • BIER mpls-label, range in [0, 1048575].
  • bier-mpls-label-range-size
    • BIER mpls-label range size.
  • link-id
    • The identifier of a link in the topology.
    • A link is specific to a topology to which it belongs.
  • source-node
    • Source node identifier, must be in same topology.
  • source-tp
    • Termination point within source node that terminates the link.
  • dest-node
    • Destination node identifier and must be in same topology.
  • dest-tp
    • Termination point within destination node that terminates the link.
  • delay
    • The link delay, default value is 0.
  • loss
    • The number of packet loss on the link and default value is 0.

Channel Manager

API Description

  • bier/channel/api/src/main/yang/bier-channel-api.yang
    • get-channel
      • Display all channel’s names in given BIER topology.
    • query-channel
      • Query specific channel in given topology and display this channel’s information (multicast flow information and related BFIR,BFER information).
    • add-channel
      • Create channel with multicast information in given BIER topology.
    • modify-channel
      • Modify the channel’s information which created above.
    • remove-channel
      • Remove given channel in given topology.
    • deploy-channel
      • Deploy channel, and configure BFIR and BFERs about this multicast flow in given topology.

Parameters Description

  • topology-id
    • BIER topology identifier.
  • channel-name
    • BIER channel (multicast flow information) name.
  • src-ip
    • The IPv4 of multicast source. The value set to zero means that the receiver interests in all source that relevant to one group.
  • dst-group
    • The IPv4 of multicast group.
  • domain-id
    • BIER domain identifier.
  • sub-domain-id
    • BIER sub-domain identifier.
  • source-wildcard
    • The wildcard information of source, in the range [1, 32].
  • group-wildcard
    • The wildcard information of multi-cast group, in the range [1, 32].
  • ingress-node
    • BFIR (Bit-Forwarding Ingress Router).
  • ingress-bfr-id
    • The bfr-id of BRIR.
  • egress-node
    • BFER (Bit-Forwarding Egress Router).
  • egress-bfr-id
    • The bfr-id of BRER.
  • bier-forwarding-type
    • The forwarding type, enum type contains BIER and BIER-TE.

Note

For more information about BIER terminology, see YANG Data Model for BIER Protocol.

Sample Configurations

1. Configure Domain And Sub-domain

1.1. Configure Domain

REST API : POST /restconf/operations/bier-topology-api:configure-domain

Sample JSON Data

{
     "input": {
        "topo-id": " bier-topo" ,
        "domain ":[
           {
              "domain-id": " 1",
           },
           {
             "domain-id": " 2",
           }
        ]
    }
}

1.2. Configure Sub-domain

REST API : POST /restconf/operations/bier-topology-api:configure-subdomain

Sample JSON Data

{
    "input": {
        "topo-id": " bier-topo" ,
        "domain-id":" 1",
        "sub-domain":[
            {
                "sub-domain-id":" 0",
            },
            {
                "sub-domain-id":"1",
            }
        ]
    }
}

2. Configure Node

2.1. Configure BIER Parameters

REST API : POST /restconf/operations/bier-config-api:configure-node

Sample JSON Data

{
    "input": {
        "topology-id": "bier-topo",
        "node-id": "node1",
        "domain": [
            {
                "domain-id": "2",
                "bier-global": {
                    "sub-domain": [
                        {
                            "sub-domain-id": "0",
                            "igp-type": "ISIS",
                            "mt-id": "1",
                            "bfr-id": "3",
                            "bitstringlength": "64-bit",
                            "af": {
                                "ipv4": [
                                    {
                                        "bitstringlength": "64",
                                        "bier-mpls-label-base": "56",
                                        "bier-mpls-label-range-size": "100"
                                    }
                                ]
                            }
                        }
                    ],
                    "encapsulation-type": "bier-encapsulation-mpls",
                    "bitstringlength": "64-bit",
                    "bfr-id": "33",
                    "ipv4-bfr-prefix": "192.168.1.1/24",
                    "ipv6-bfr-prefix": "1030:0:0:0:C9B4:FF12:48AA:1A2B/60"
                }
            }
        ]
    }
}

2.2. Configure BIER-TE label

REST API : POST /restconf/operations/bier-te-config-api:configure-te-label

Sample JSON Data

{
    "input": {
        "topology-id": "bier-topo",
        "node-id": "node1",
        "label-base": "100",
        "label-range-size": "20"
    }
}

2.3. Configure BIER-TE Parameters

REST API : POST /restconf/operations/bier-te-config-api:configure-te-node

Sample JSON Data

{
    "input": {
        "topology-id": "bier-topo",
        "node-id": "node1",
        "te-domain": [
            {
                "domain-id": "1",
                "te-sub-domain": [
                    {
                        "sub-domain-id": "0",
                        "te-bsl": [
                            {
                                "bitstringlength": "64-bit",
                                "te-si": [
                                    {
                                        "si": "1",
                                        "te-bp": [
                                            {
                                                "tp-id":"tp1",
                                                "bitposition": "1"
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }
}

3. Query BIER Topology Information

3.1. Load Topology

REST API : POST /restconf/operations/bier-topology-api:load-topology

no request body.

3.2. Query Topology

REST API : POST /restconf/operations/bier-topology-api:query-topology

Sample JSON Data

{
    "input": {
        "topo-id": "bier-topo"
    }
}

3.3. Query BIER Node

REST API : POST /restconf/operations/bier-topology-api:query-node

Sample JSON Data

{
    "input": {
         "topo-id": "bier-topo",
         "node-id": "node1"
     }
}

3.5. Query Domain

REST API : POST /restconf/operations/bier-topology-api:query-domain

Sample JSON Data

{
    "input": {
         "topo-id": "bier-topo"
     }
}

3.6. Query Sub-domain

REST API : POST /restconf/operations/bier-topology-api:query-subdomain

Sample JSON Data

{
    "input": {
         "topo-id": "bier-topo",
         "domain-id": "1"
     }
}

3.7. Query Sub-domain Node

REST API : POST /restconf/operations/bier-topology-api:query-subdomain-node

Sample JSON Data

{
    "input": {
        "topology-id": "bier-topo",
        "domain-id": "1",
        "sub-domain-id": "0"
    }
}

3.9. Query BIER-TE Sub-domain Node

REST API : POST /restconf/operations/bier-topology-api:query-te-subdomain-node

Sample JSON Data

{
    "input": {
        "topology-id": "bier-topo",
        "domain-id": "1",
        "sub-domain-id": "0"
    }
}

4. BIER Channel Configuration

4.1. Configure Channel

REST API : POST /restconf/operations/bier-channel-api:add-channel

Sample JSON Data

{
    "input": {
        "topology-id": "bier-topo",
        "name": "channel-1",
        "src-ip": "1.1.1.1",
        "dst-group": "224.1.1.1",
        "domain-id": "1",
        "sub-domain-id": "11",
        "source-wildcard": "24",
        "group-wildcard": "30"
    }
}

4.2. Modify Channel

REST API : POST /restconf/operations/bier-channel-api:modify-channel

Sample JSON Data

{
    "input": {
        "topology-id": "bier-topo",
        "name": "channel-1",
        "src-ip": "2.2.2.2",
        "dst-group": "225.1.1.1",
        "domain-id": "1",
        "sub-domain-id": "11",
        "source-wildcard": "24",
        "group-wildcard": "30"
    }
}

5. Deploy Channel

REST API : POST /restconf/operations/bier-channel-api:deploy-channel

Sample JSON Data

{
    "input": {
        "topology-id": "bier-topo",
        "channel-name": "channel-1",
        "bier-forwarding-type":"bier-te"
        "ingress-node": "node1",
        "egress-node": [
            {
                "node-id": "node2"
            },
            {
                "node-id": "node3"
            }
        ]
    }
}

6. Query Channel Information

6.1. Get Channel

REST API : POST /restconf/operations/bier-channel-api:get-channel

Sample JSON Data

{
    "input": {
        "topology-id": "bier-topo"
    }
}

6.2. Query Channel

REST API : POST /restconf/operations/bier-channel-api:query-channel

Sample JSON Data

{
    "input": {
        "topology-id": "bier-topo",
        "channel-name": [
            "channel-1",
            "channel-2"
        ]
    }
}

7. Remove Channel

REST API : POST /restconf/operations/bier-channel-api:remove-channel

Sample JSON Data

{
    "input": {
        "topology-id": "bier-topo",
        "channel-name": "channel-1"
    }
}

8. Delete BIER and BIER-TE Configuration

8.1. Delete BIER Node

REST API : POST /restconf/operations/bier-config-api:delete-node

Sample JSON Data

{
     "input": {
             "topo-id": "bier-topo",
             "node-id": "node3",
             "domain-id": "1",
             "subdomain-id": "0"
    }
}

8.2. Delete IPv4 of BIER Node

REST API : POST /restconf/operations/bier-config-api:delete-ipv4

Sample JSON Data

{
    input: {
        "topology-id": "bier-topo",
        "domain-id": "1",
        "sub-domain-id": "0",
        "node-id": "node1",
        "ipv4": {
            "bier-mpls-label-base": "10",
            "bier-mpls-label-range-size": "16",
            "bitstringlength": "64"
        }
    }
}

8.3. Delete IPv6 of BIER Node

REST API : POST /restconf/operations/bier-config-api:delete-ipv6

Sample JSON Data

{
    input: {
        "topology-id": "bier-topo",
        "domain-id": "1",
        "sub-domain-id": "0",
        "node-id": "node1",
        "ipv6": {
            "bier-mpls-label-base": "10",
            "bier-mpls-label-range-size": "16",
            "bitstringlength": "64"
        }
    }
}

8.4. Delete BIER-TE BSL

REST API : POST /restconf/operations/bier-te-config-api:delete-te-bsl

Sample JSON Data

{
    input:{
        "topology-id": "bier-topo",
        "node-id": "node1",
        "domain-id": "1",
        "sub-domain-id": "0",
        "bitstringlength": "64-bit"
    }
}

8.5. Delete BIER-TE SI

REST API : POST /restconf/operations/bier-te-config-api:delete-te-si

Sample JSON Data

{
    input:{
        "topology-id": "bier-topo",
        "node-id": "node1",
        "domain-id": "1",
        "sub-domain-id": "0",
        "bitstringlength": "64-bit",
        "si": "1"
    }
}

8.6. Delete BIER-TE BP

REST API : POST /restconf/operations/bier-te-config-api:delete-te-bp

Sample JSON Data

{
    input: {
        "topology-id": "bier-topo",
        "node-id": "node1",
        "domain-id": "1",
        "sub-domain-id": "0",
        "bitstringlength": "64-bit",
        "si": "1",
        "tp-id": "tp1"
    }
}

8.7. Delete BIER-TE Label

REST API : POST /restconf/operations/bier-te-config-api:delete-te-label

Sample JSON Data

{
     "input": {
             "topo-id": "bier-topo",
             "node-id": "node1"
    }
}

8.8. Delete Sub-domain

REST API : POST /restconf/operations/bier-topology-api:delete-subdomian

Sample JSON Data

{
     "input": {
             "topo-id": "bier-topo",
             "domain-id": "1",
             "subdomain-id": "0"
    }
}

8.9. Delete Domain

REST API : POST /restconf/operations/bier-topology-api:delete-domian

Sample JSON Data

{
     "input": {
             "topo-id": "bier-topo",
             "domain-id": "1"
    }
}