Content¶
The contents of a PUT or POST should be a OpenDaylight Table Type Pattern. An example of one is provided below. The example can also be found at parser/sample-TTP-from-tests.ttp in the TTP git repository.
Sample Table Type Pattern (json).
{
"table-type-patterns": {
"table-type-pattern": [
{
"security": {
"doc": [
"This TTP is not published for use by ONF. It is an example and for",
"illustrative purposes only.",
"If this TTP were published for use it would include",
"guidance as to any security considerations in this doc member."
]
},
"NDM_metadata": {
"authority": "org.opennetworking.fawg",
"OF_protocol_version": "1.3.3",
"version": "1.0.0",
"type": "TTPv1",
"doc": [
"Example of a TTP supporting L2 (unicast, multicast, flooding), L3 (unicast only),",
"and an ACL table."
],
"name": "L2-L3-ACLs"
},
"identifiers": [
{
"doc": [
"The VLAN ID of a locally attached L2 subnet on a Router."
],
"var": "<subnet_VID>"
},
{
"doc": [
"An OpenFlow group identifier (integer) identifying a group table entry",
"of the type indicated by the variable name"
],
"var": "<<group_entry_types/name>>"
}
],
"features": [
{
"doc": [
"Flow entry notification Extension – notification of changes in flow entries"
],
"feature": "ext187"
},
{
"doc": [
"Group notifications Extension – notification of changes in group or meter entries"
],
"feature": "ext235"
}
],
"meter_table": {
"meter_types": [
{
"name": "ControllerMeterType",
"bands": [
{
"type": "DROP",
"rate": "1000..10000",
"burst": "50..200"
}
]
},
{
"name": "TrafficMeter",
"bands": [
{
"type": "DSCP_REMARK",
"rate": "10000..500000",
"burst": "50..500"
},
{
"type": "DROP",
"rate": "10000..500000",
"burst": "50..500"
}
]
}
],
"built_in_meters": [
{
"name": "ControllerMeter",
"meter_id": 1,
"type": "ControllerMeterType",
"bands": [
{
"rate": 2000,
"burst": 75
}
]
},
{
"name": "AllArpMeter",
"meter_id": 2,
"type": "ControllerMeterType",
"bands": [
{
"rate": 1000,
"burst": 50
}
]
}
]
},
"table_map": [
{
"name": "ControlFrame",
"number": 0
},
{
"name": "IngressVLAN",
"number": 10
},
{
"name": "MacLearning",
"number": 20
},
{
"name": "ACL",
"number": 30
},
{
"name": "L2",
"number": 40
},
{
"name": "ProtoFilter",
"number": 50
},
{
"name": "IPv4",
"number": 60
},
{
"name": "IPv6",
"number": 80
}
],
"parameters": [
{
"doc": [
"documentation"
],
"name": "Showing-curt-how-this-works",
"type": "type1"
}
],
"flow_tables": [
{
"doc": [
"Filters L2 control reserved destination addresses and",
"may forward control packets to the controller.",
"Directs all other packets to the Ingress VLAN table."
],
"name": "ControlFrame",
"flow_mod_types": [
{
"doc": [
"This match/action pair allows for flow_mods that match on either",
"ETH_TYPE or ETH_DST (or both) and send the packet to the",
"controller, subject to metering."
],
"name": "Frame-To-Controller",
"match_set": [
{
"field": "ETH_TYPE",
"match_type": "all_or_exact"
},
{
"field": "ETH_DST",
"match_type": "exact"
}
],
"instruction_set": [
{
"doc": [
"This meter may be used to limit the rate of PACKET_IN frames",
"sent to the controller"
],
"instruction": "METER",
"meter_name": "ControllerMeter"
},
{
"instruction": "APPLY_ACTIONS",
"actions": [
{
"action": "OUTPUT",
"port": "CONTROLLER"
}
]
}
]
}
],
"built_in_flow_mods": [
{
"doc": [
"Mandatory filtering of control frames with C-VLAN Bridge reserved DA."
],
"name": "Control-Frame-Filter",
"priority": "1",
"match_set": [
{
"field": "ETH_DST",
"mask": "0xfffffffffff0",
"value": "0x0180C2000000"
}
]
},
{
"doc": [
"Mandatory miss flow_mod, sends packets to IngressVLAN table."
],
"name": "Non-Control-Frame",
"priority": "0",
"instruction_set": [
{
"instruction": "GOTO_TABLE",
"table": "IngressVLAN"
}
]
}
]
}
],
"group_entry_types": [
{
"doc": [
"Output to a port, removing VLAN tag if needed.",
"Entry per port, plus entry per untagged VID per port."
],
"name": "EgressPort",
"group_type": "INDIRECT",
"bucket_types": [
{
"name": "OutputTagged",
"action_set": [
{
"action": "OUTPUT",
"port": "<port_no>"
}
]
},
{
"name": "OutputUntagged",
"action_set": [
{
"action": "POP_VLAN"
},
{
"action": "OUTPUT",
"port": "<port_no>"
}
]
},
{
"opt_tag": "VID-X",
"name": "OutputVIDTranslate",
"action_set": [
{
"action": "SET_FIELD",
"field": "VLAN_VID",
"value": "<local_vid>"
},
{
"action": "OUTPUT",
"port": "<port_no>"
}
]
}
]
}
],
"flow_paths": [
{
"doc": [
"This object contains just a few examples of flow paths, it is not",
"a comprehensive list of the flow paths required for this TTP. It is",
"intended that the flow paths array could include either a list of",
"required flow paths or a list of specific flow paths that are not",
"required (whichever is more concise or more useful."
],
"name": "L2-2",
"path": [
"Non-Control-Frame",
"IV-pass",
"Known-MAC",
"ACLskip",
"L2-Unicast",
"EgressPort"
]
},
{
"name": "L2-3",
"path": [
"Non-Control-Frame",
"IV-pass",
"Known-MAC",
"ACLskip",
"L2-Multicast",
"L2Mcast",
"[EgressPort]"
]
},
{
"name": "L2-4",
"path": [
"Non-Control-Frame",
"IV-pass",
"Known-MAC",
"ACL-skip",
"VID-flood",
"VIDflood",
"[EgressPort]"
]
},
{
"name": "L2-5",
"path": [
"Non-Control-Frame",
"IV-pass",
"Known-MAC",
"ACLskip",
"L2-Drop"
]
},
{
"name": "v4-1",
"path": [
"Non-Control-Frame",
"IV-pass",
"Known-MAC",
"ACLskip",
"L2-Router-MAC",
"IPv4",
"v4-Unicast",
"NextHop",
"EgressPort"
]
},
{
"name": "v4-2",
"path": [
"Non-Control-Frame",
"IV-pass",
"Known-MAC",
"ACLskip",
"L2-Router-MAC",
"IPv4",
"v4-Unicast-ECMP",
"L3ECMP",
"NextHop",
"EgressPort"
]
}
]
}
]
}
}