Configuring Traffic Analytics
The Traffic Analytics (TA) feature can identify services, deliver analytics data, collapse multiple TCP session data into a single record in the show flow cache database an export, export cadence for troubleshoot flows, and so on. For more information, see Cisco Nexus 9000 Series NX-OS Programmability Guide:
Configuring Traffic Analytics
Configuring Traffic Analytics
POST http://<mgmt0_IP>/api/mo/sys.json
{
"topSystem": {
"children": [
{
"fmEntity": {
"children": [
{
"fmAnalytics": {
"attributes": {
"adminSt": "enabled"
}
}
}
]
}
}
]
}
}
CLI Command
The CLI command below is the equivalent of the payload example displayed in the pane on the right. Click the DME tab in the top-left corner of the right pane to view the JSON payload or the YANG tab to view the XML payload.
feature analytics
Note: The property information for this example was added in Release 10.5(3).
Related Documentation
For other CLI options, see the Cisco Nexus 9000 Series NX-OS Command Reference:
See the NX-API DME Model Reference for detailed information about classes and attributes described in the payload:
https://developer.cisco.com/site/nx-os/docs/nexus-model-reference/
For information about using the payloads, see the Cisco Nexus 9000 Series NX-OS Programmability Guide:
Configuring Analytics Exporter
Configuring Analytics Exporter
POST http://<mgmt0_IP>/api/mo/sys.json
{ "topSystem": { "children": [ { "analyticsEntity": { "children": [ { "analyticsInst": { "attributes": { "enableAnalyticsSubmode": "yes", "mode": "analytics" }, "children": [ { "analyticsCollector": { "attributes": { "dscp": "55", "dstAddr": "110.5.137.249", "dstPort": "20110", "eventDstPort": "20111", "name": "exporteripv4-intf", "srcIf": "eth1/14", "v9": "yes", "vrfName": "default" } } } ] } } ] } } ] } }
CLI Command
The CLI command below is the equivalent of the payload example displayed in the pane on the right. Click the DME tab in the top-left corner of the right pane to view the JSON payload or the YANG tab to view the XML payload.
analytics flow exporter exporteripv4-intf destination 110.5.137.249 v9 transport udp 20110 events transport udp 20111 source Ethernet1/14 dscp 55
Related Documentation
For other CLI options, see the Cisco Nexus 9000 Series NX-OS Command Reference:
See the NX-API DME Model Reference for detailed information about classes and attributes described in the payload:
https://developer.cisco.com/site/nx-os/docs/nexus-model-reference/
For information about using the payloads, see the Cisco Nexus 9000 Series NX-OS Programmability Guide:
Configuring Flow Record and Monitor
Configuring Flow Record and Monitor
POST http://<mgmt0_IP>/api/mo/sys.json
{
"topSystem": {
"children": [
{
"analyticsEntity": {
"children": [
{
"analyticsInst": {
"attributes": {
"enableAnalyticsSubmode": "yes",
"mode": "analytics"
},
"children": [
{
"analyticsMonitor": {
"attributes": {
"name": "ANmonitor1ipv4-intf"
},
"children": [
{
"analyticsCollectorBucket": {
"attributes": {
"hashHi": "4095",
"hashLo": "0",
"id": "1"
},
"children": [
{
"analyticsRsCollectorAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/collector-[exporteripv4-intf]"
}
}
}
]
}
},
{
"analyticsRsRecordPAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/recordp-[recordAll]"
}
}
}
]
}
},
{
"analyticsRecordP": {
"attributes": {
"collect": "src-intf,ts-first,ts-recent",
"match": "dst-ip,dst-port,proto,src-ip,src-port",
"name": "recordAll"
}
}
}
]
}
}
]
}
}
]
}
}
CLI Command
The CLI command below is the equivalent of the payload example displayed in the pane on the right. Click the DME tab in the top-left corner of the right pane to view the JSON payload or the YANG tab to view the XML payload.
`flow record recordAll match ip source address match ip destination address match ip protocol match transport source-port match transport destination-port collect timestamp sys-uptime first collect timestamp sys-uptime last
flow monitor ANmonitor1ipv4-intf record recordAll exporter-bucket-id 1 0 4095 exporter exporteripv4-intf`
Note: The property information for this example was added in Release 10.5(3).
Verifying a DME Configuration
The following table contains the distinguished name (DN) for each managed object (MO) in the DME payload. Issue a GET request using the DN to verify the configuration was posted or to get information about the configured properties of a particular object.
| MO | DN | ||
|---|---|---|---|
| collector | sys/analytics/inst-analytics/collector-[exporteripv4-intf] | recordp | sys/analytics/inst-analytics/recordp-[recordAll] |
Related Documentation
For other CLI options, see the Cisco Nexus 9000 Series NX-OS Command Reference:
See the NX-API DME Model Reference for detailed information about classes and attributes described in the payload:
https://developer.cisco.com/site/nx-os/docs/nexus-model-reference/
For information about using the payloads, see the Cisco Nexus 9000 Series NX-OS Programmability Guide:
Configuring Flow Record and Monitor
Configuring Flow Record and Monitor
POST http://<mgmt0_IP>/api/mo/sys.json
{
"topSystem": {
"children": [
{
"analyticsEntity": {
"children": [
{
"analyticsInst": {
"attributes": {
"enableAnalyticsSubmode": "yes",
"mode": "analytics"
},
"children": [
{
"analyticsMonitor": {
"attributes": {
"name": "ANmonitor1ipv4-intf"
},
"children": [
{
"analyticsCollectorBucket": {
"attributes": {
"hashHi": "4095",
"hashLo": "0",
"id": "1"
},
"children": [
{
"analyticsRsCollectorAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/collector-[exporteripv4-intf]"
}
}
}
]
}
},
{
"analyticsRsRecordPAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/recordp-[recordAll]"
}
}
}
]
}
},
{
"analyticsRecordP": {
"attributes": {
"collect": "src-intf,ts-first,ts-recent",
"match": "dst-ip,dst-port,proto,src-ip,src-port",
"name": "recordAll"
}
}
}
]
}
}
]
}
}
]
}
}
CLI Command
The CLI command below is the equivalent of the payload example displayed in the pane on the right. Click the DME tab in the top-left corner of the right pane to view the JSON payload or the YANG tab to view the XML payload.
`flow record recordAll match ip source address match ip destination address match ip protocol match transport source-port match transport destination-port collect timestamp sys-uptime first collect timestamp sys-uptime last
flow monitor ANmonitor1ipv4-intf record recordAll exporter-bucket-id 1 0 4095 exporter exporteripv4-intf`
Note: The property information for this example was added in Release 10.5(3).
Verifying a DME Configuration
The following table contains the distinguished name (DN) for each managed object (MO) in the DME payload. Issue a GET request using the DN to verify the configuration was posted or to get information about the configured properties of a particular object.
| MO | DN | ||
|---|---|---|---|
| collector | sys/analytics/inst-analytics/collector-[exporteripv4-intf] | recordp | sys/analytics/inst-analytics/recordp-[recordAll] |
Related Documentation
For other CLI options, see the Cisco Nexus 9000 Series NX-OS Command Reference:
See the NX-API DME Model Reference for detailed information about classes and attributes described in the payload:
https://developer.cisco.com/site/nx-os/docs/nexus-model-reference/
For information about using the payloads, see the Cisco Nexus 9000 Series NX-OS Programmability Guide:
Configuring Flow Profile
Configuring Flow Profile
POST http://<mgmt0_IP>/api/mo/sys.json
{
"topSystem": {
"children": [
{
"analyticsEntity": {
"children": [
{
"analyticsInst": {
"attributes": {
"enableAnalyticsSubmode": "yes",
"mode": "analytics"
},
"children": [
{
"analyticsEvents": {
"attributes": {
"aclDrops": "yes",
"groupDropEvents": "yes",
"name": "acldrop"
}
}
},
{
"analyticsTrafficAnalytics": {
"attributes": {
"serviceDbSize": "4500",
"troubleshootExportInterval": "20"
}
}
},
{
"analyticsProfile": {
"attributes": {
"collectIntvl": "1000",
"name": "profile1",
"srcPort": "20130"
},
"children": [
{
"analyticsPayloadLenBin": {
"attributes": {
"hi": "16383",
"id": "8"
}
}
},
{
"analyticsPayloadLenBin": {
"attributes": {
"hi": "1499",
"id": "6"
}
}
},
{
"analyticsPayloadLenBin": {
"attributes": {
"hi": "1279",
"id": "5"
}
}
},
{
"analyticsPayloadLenBin": {
"attributes": {
"hi": "575",
"id": "4"
}
}
},
{
"analyticsPayloadLenBin": {
"attributes": {
"hi": "255",
"id": "3"
}
}
},
{
"analyticsPayloadLenBin": {
"attributes": {
"hi": "9219",
"id": "7"
}
}
},
{
"analyticsPayloadLenBin": {
"attributes": {
"hi": "127",
"id": "2"
}
}
},
{
"analyticsPayloadLenBin": {
"attributes": {
"hi": "1",
"id": "1"
}
}
},
{
"analyticsRcvWindowSzBin": {
"attributes": {
"hi": "499",
"id": "2"
}
}
},
{
"analyticsRcvWindowSzBin": {
"attributes": {
"hi": "99",
"id": "1"
}
}
},
{
"analyticsTCPOptHdrLenBin": {
"attributes": {
"hi": "15",
"id": "3"
}
}
},
{
"analyticsTCPOptHdrLenBin": {
"attributes": {
"hi": "9",
"id": "2"
}
}
},
{
"analyticsTCPOptHdrLenBin": {
"attributes": {
"hi": "1",
"id": "1"
}
}
}
]
}
}
]
}
}
]
}
}
]
}
}
CLI Command
The CLI command below is the equivalent of the payload example displayed in the pane on the right. Click the DME tab in the top-left corner of the right pane to view the JSON payload or the YANG tab to view the XML payload.
analytics flow profile profile1 collect interval 1000 source port 20130
Note: The property information for this example was added in Release 10.5(3).
Related Documentation
For other CLI options, see the Cisco Nexus 9000 Series NX-OS Command Reference:
See the NX-API DME Model Reference for detailed information about classes and attributes described in the payload:
https://developer.cisco.com/site/nx-os/docs/nexus-model-reference/
For information about using the payloads, see the Cisco Nexus 9000 Series NX-OS Programmability Guide:
Configuring Event
Configuring Event
POST http://<mgmt0_IP>/api/mo/sys.json
{
"topSystem": {
"children": [
{
"analyticsEntity": {
"children": [
{
"analyticsInst": {
"attributes": {
"enableAnalyticsSubmode": "yes",
"mode": "analytics"
},
"children": [
{
"analyticsEvents": {
"attributes": {
"aclDrops": "yes",
"bufferDrops": "yes",
"fwdDrops": "yes",
"groupDropEvents": "yes",
"name": "fteevent"
}
}
}
]
}
}
]
}
}
]
}
}
CLI Command
The CLI command below is the equivalent of the payload example displayed in the pane on the right. Click the DME tab in the top-left corner of the right pane to view the JSON payload or the YANG tab to view the XML payload.
analytics flow event fteevent group drop-events capture buffer-drops capture acl-drops capture fwd-drops
Note: The property information for this example was added in Release 10.5(3).
Related Documentation
For other CLI options, see the Cisco Nexus 9000 Series NX-OS Command Reference:
See the NX-API DME Model Reference for detailed information about classes and attributes described in the payload:
https://developer.cisco.com/site/nx-os/docs/nexus-model-reference/
For information about using the payloads, see the Cisco Nexus 9000 Series NX-OS Programmability Guide:
Configuring Traffic Analytics, Data Base Size, and Filter Export Interval
Configuring Traffic Analytics, Data Base Size, and Filter Export Interval
POST http://<mgmt0_IP>/api/mo/sys.json
{
"topSystem": {
"children": [
{
"analyticsEntity": {
"children": [
{
"analyticsInst": {
"attributes": {
"enableAnalyticsSubmode": "yes",
"mode": "analytics"
},
"children": [
{
"analyticsTrafficAnalytics": {
"attributes": {
"serviceDbSize": "4000",
"troubleshootExportInterval": "20"
}
}
}
]
}
}
]
}
}
]
}
}
CLI Command
The CLI command below is the equivalent of the payload example displayed in the pane on the right. Click the DME tab in the top-left corner of the right pane to view the JSON payload or the YANG tab to view the XML payload.
analytics flow traffic-analytics db-size 4000 filter export-interval 20
Note: The property information for this example was added in Release 10.5(3).
Related Documentation
For other CLI options, see the Cisco Nexus 9000 Series NX-OS Command Reference:
See the NX-API DME Model Reference for detailed information about classes and attributes described in the payload:
https://developer.cisco.com/site/nx-os/docs/nexus-model-reference/
For information about using the payloads, see the Cisco Nexus 9000 Series NX-OS Programmability Guide:
Configuring Global Flow System and Traffic Analytics
Configuring Global Flow System and Traffic Analytics
POST http://<mgmt0_IP>/api/mo/sys.json
{
"topSystem": {
"children": [
{
"analyticsEntity": {
"children": [
{
"analyticsInst": {
"attributes": {
"enableAnalyticsSubmode": "yes",
"mode": "analytics"
},
"children": [
{
"analyticsFwdInstTarget": {
"attributes": {
"collectorId": "2367689",
"id": "132098",
"trafficAnalytics": "yes"
},
"children": [
{
"analyticsRsEventsAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/events-[acl-drop]"
}
}
},
{
"analyticsRsPolicyAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/policy-[ftsystem-TS]"
}
}
},
{
"analyticsRsProfAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/prof-[profile1]"
}
}
},
{
"analyticsRsMonitorAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/monitor-[ANmonitor1ipv4-intf-2]"
}
}
}
]
}
},
{
"analyticsFwdInstTarget": {
"attributes": {
"collectorId": "2363593",
"id": "132097",
"trafficAnalytics": "yes"
},
"children": [
{
"analyticsRsEventsAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/events-[acl-drop]"
}
}
},
{
"analyticsRsPolicyAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/policy-[ftsystem-TS]"
}
}
},
{
"analyticsRsProfAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/prof-[profile1]"
}
}
},
{
"analyticsRsMonitorAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/monitor-[ANmonitor1ipv4-intf-2]"
}
}
}
]
}
},
{
"analyticsFwdInstTarget": {
"attributes": {
"collectorId": "2302153",
"id": "131842",
"trafficAnalytics": "yes"
},
"children": [
{
"analyticsRsEventsAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/events-[acl-drop]"
}
}
},
{
"analyticsRsPolicyAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/policy-[ftsystem-TS]"
}
}
},
{
"analyticsRsProfAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/prof-[profile1]"
}
}
},
{
"analyticsRsMonitorAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/monitor-[ANmonitor1ipv4-intf-2]"
}
}
}
]
}
},
{
"analyticsFwdInstTarget": {
"attributes": {
"collectorId": "2298057",
"id": "131841",
"trafficAnalytics": "yes"
},
"children": [
{
"analyticsRsEventsAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/events-[acl-drop]"
}
}
},
{
"analyticsRsPolicyAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/policy-[ftsystem-TS]"
}
}
},
{
"analyticsRsProfAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/prof-[profile1]"
}
}
},
{
"analyticsRsMonitorAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/monitor-[ANmonitor1ipv4-intf-2]"
}
}
}
]
}
},
{
"analyticsFwdInstTarget": {
"attributes": {
"collectorId": "2232521",
"id": "131585",
"trafficAnalytics": "yes"
},
"children": [
{
"analyticsRsEventsAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/events-[acl-drop]"
}
}
},
{
"analyticsRsPolicyAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/policy-[ftsystem-TS]"
}
}
},
{
"analyticsRsProfAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/prof-[profile1]"
}
}
},
{
"analyticsRsMonitorAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/monitor-[ANmonitor1ipv4-intf-2]"
}
}
}
]
}
},
{
"analyticsFwdInstTarget": {
"attributes": {
"collectorId": "2171081",
"id": "131330",
"trafficAnalytics": "yes"
},
"children": [
{
"analyticsRsEventsAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/events-[acl-drop]"
}
}
},
{
"analyticsRsPolicyAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/policy-[ftsystem-TS]"
}
}
},
{
"analyticsRsProfAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/prof-[profile1]"
}
}
},
{
"analyticsRsMonitorAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/monitor-[ANmonitor1ipv4-intf-2]"
}
}
}
]
}
},
{
"analyticsFwdInstTarget": {
"attributes": {
"collectorId": "2166985",
"id": "131329",
"trafficAnalytics": "yes"
},
"children": [
{
"analyticsRsEventsAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/events-[acl-drop]"
}
}
},
{
"analyticsRsPolicyAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/policy-[ftsystem-TS]"
}
}
},
{
"analyticsRsProfAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/prof-[profile1]"
}
}
},
{
"analyticsRsMonitorAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/monitor-[ANmonitor1ipv4-intf-2]"
}
}
}
]
}
},
{
"analyticsFwdInstTarget": {
"attributes": {
"collectorId": "1315017",
"id": "66561",
"trafficAnalytics": "yes"
},
"children": [
{
"analyticsRsEventsAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/events-[acl-drop]"
}
}
},
{
"analyticsRsPolicyAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/policy-[ftsystem-TS]"
}
}
},
{
"analyticsRsProfAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/prof-[profile1]"
}
}
},
{
"analyticsRsMonitorAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/monitor-[ANmonitor1ipv4-intf-2]"
}
}
}
]
}
},
{
"analyticsFwdInstTarget": {
"attributes": {
"collectorId": "1183945",
"id": "66049",
"trafficAnalytics": "yes"
},
"children": [
{
"analyticsRsEventsAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/events-[acl-drop]"
}
}
},
{
"analyticsRsPolicyAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/policy-[ftsystem-TS]"
}
}
},
{
"analyticsRsProfAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/prof-[profile1]"
}
}
},
{
"analyticsRsMonitorAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/monitor-[ANmonitor1ipv4-intf-2]"
}
}
}
]
}
},
{
"analyticsFwdInstTarget": {
"attributes": {
"collectorId": "2236617",
"id": "131586",
"trafficAnalytics": "yes"
},
"children": [
{
"analyticsRsEventsAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/events-[acl-drop]"
}
}
},
{
"analyticsRsPolicyAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/policy-[ftsystem-TS]"
}
}
},
{
"analyticsRsProfAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/prof-[profile1]"
}
}
},
{
"analyticsRsMonitorAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/monitor-[ANmonitor1ipv4-intf-2]"
}
}
}
]
}
},
{
"analyticsFwdInstTarget": {
"attributes": {
"collectorId": "1249481",
"id": "66305",
"trafficAnalytics": "yes"
},
"children": [
{
"analyticsRsEventsAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/events-[acl-drop]"
}
}
},
{
"analyticsRsPolicyAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/policy-[ftsystem-TS]"
}
}
},
{
"analyticsRsProfAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/prof-[profile1]"
}
}
},
{
"analyticsRsMonitorAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/monitor-[ANmonitor1ipv4-intf-2]"
}
}
}
]
}
},
{
"analyticsFwdInstTarget": {
"attributes": {
"collectorId": "1118409",
"id": "65793",
"trafficAnalytics": "yes"
},
"children": [
{
"analyticsRsEventsAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/events-[acl-drop]"
}
}
},
{
"analyticsRsPolicyAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/policy-[ftsystem-TS]"
}
}
},
{
"analyticsRsProfAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/prof-[profile1]"
}
}
},
{
"analyticsRsMonitorAtt": {
"attributes": {
"tDn": "sys/analytics/inst-analytics/monitor-[ANmonitor1ipv4-intf-2]"
}
}
}
]
}
}
]
}
}
]
}
}
]
}
}
CLI Command
The CLI command below is the equivalent of the payload example displayed in the pane on the right. Click the DME tab in the top-left corner of the right pane to view the JSON payload or the YANG tab to view the XML payload.
analytics flow system config traffic-analytics exporter-id 201 monitor ANmonitor1ipv4-intf-2 input profile profile1 filter ftsystem-TS event acl-drop
Note: The property information for this example was added in Release 10.5(3).
Note: The property information for this example was added in Release 10.5(3).
Verifying a DME Configuration
The following table contains the distinguished name (DN) for each managed object (MO) in the DME payload. Issue a GET request using the DN to verify the configuration was posted or to get information about the configured properties of a particular object.
| MO | DN | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| events | sys/analytics/inst-analytics/events-[acl-drop] | policy | sys/analytics/inst-analytics/policy-[ftsystem-TS] | prof | sys/analytics/inst-analytics/prof-[profile1] | monitor | sys/analytics/inst-analytics/monitor-[ANmonitor1ipv4-intf-2] | events | sys/analytics/inst-analytics/events-[acl-drop] | policy | sys/analytics/inst-analytics/policy-[ftsystem-TS] | prof | sys/analytics/inst-analytics/prof-[profile1] |
Related Documentation
For other CLI options, see the Cisco Nexus 9000 Series NX-OS Command Reference:
See the NX-API DME Model Reference for detailed information about classes and attributes described in the payload:
https://developer.cisco.com/site/nx-os/docs/nexus-model-reference/
For information about using the payloads, see the Cisco Nexus 9000 Series NX-OS Programmability Guide: