{
    "content": [
        {
            "type": "text",
            "text": "# tc-etf (man)\n\n## NAME\n\nETF - Earliest TxTime First (ETF) Qdisc\n\n## SYNOPSIS\n\ntc qdisc ... dev dev parent classid [ handle major: ] etf clockid clockid [ delta deltansecs\n] [ deadlinemode ] [ offload ]\n\n## DESCRIPTION\n\nThe ETF (Earliest TxTime First) qdisc allows applications  to  control  the  instant  when  a\npacket  should  be  dequeued from the traffic control layer into the netdevice. If offload is\nconfigured and supported by the network interface card, the it will also control when packets\nleave the network controller.\n\n## Sections\n\n- **NAME**\n- **SYNOPSIS**\n- **DESCRIPTION**\n- **PARAMETERS**\n- **EXAMPLES**\n- **AUTHORS**\n\nUse structuredContent.sections for detailed options, examples, and full documentation.\n"
        }
    ],
    "structuredContent": {
        "command": "tc-etf",
        "section": "",
        "mode": "man",
        "summary": "ETF - Earliest TxTime First (ETF) Qdisc",
        "synopsis": "tc qdisc ... dev dev parent classid [ handle major: ] etf clockid clockid [ delta deltansecs\n] [ deadlinemode ] [ offload ]",
        "tldr_summary": null,
        "tldr_examples": [],
        "tldr_source": null,
        "flags": [],
        "examples": [
            "ETF is used to enforce a Quality of Service. It controls when each packets should be dequeued",
            "and  transmitted,  and can be used for limiting the data rate of a traffic class. To separate",
            "packets into traffic classes the user may choose mqprio(8), and configure it like this:",
            "# tc qdisc add dev eth0 handle 100: parent root mqprio numtc 3 \\",
            "map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 \\",
            "queues 1@0 1@1 2@2 \\",
            "hw 0",
            "To replace the current queueing discipline by ETF in traffic class number 0, issue:",
            "# tc qdisc replace dev eth0 parent 100:1 etf \\",
            "clockid CLOCKTAI delta 300000 offload",
            "With the options above, etf will be configured to use CLOCKTAI as its clockidt, will sched‐",
            "ule  packets for 300 us before their txtime, and will enable the functionality on that in the",
            "network interface card. Deadline mode will not be configured for this mode."
        ],
        "see_also": [],
        "section_outline": [
            {
                "name": "NAME",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "SYNOPSIS",
                "lines": 4,
                "subsections": []
            },
            {
                "name": "DESCRIPTION",
                "lines": 28,
                "subsections": []
            },
            {
                "name": "PARAMETERS",
                "lines": 39,
                "subsections": []
            },
            {
                "name": "EXAMPLES",
                "lines": 19,
                "subsections": []
            },
            {
                "name": "AUTHORS",
                "lines": 6,
                "subsections": []
            }
        ],
        "sections": {
            "NAME": {
                "content": "ETF - Earliest TxTime First (ETF) Qdisc\n",
                "subsections": []
            },
            "SYNOPSIS": {
                "content": "tc qdisc ... dev dev parent classid [ handle major: ] etf clockid clockid [ delta deltansecs\n] [ deadlinemode ] [ offload ]\n\n",
                "subsections": []
            },
            "DESCRIPTION": {
                "content": "The ETF (Earliest TxTime First) qdisc allows applications  to  control  the  instant  when  a\npacket  should  be  dequeued from the traffic control layer into the netdevice. If offload is\nconfigured and supported by the network interface card, the it will also control when packets\nleave the network controller.\n\nETF  achieves  that  by buffering packets until a configurable time before their transmission\ntime (i.e. txtime, or deadline), which can be configured through the delta option.\n\nThe qdisc uses a rb-tree internally so packets are always 'ordered' by their txtime and  will\nbe dequeued following the (next) earliest txtime first.\n\nIt relies on the SOTXTIME socket option and the SCMTXTIME CMSG in each packet field to con‐\nfigure the behavior of time dependent sockets: the clockid to be used as a reference, if  the\nexpected  mode  of  txtime  for  that  socket is deadline or strict mode, and if packet drops\nshould be reported on the socket's error queue. See socket(7) for more information.\n\nThe etf qdisc will drop any packets with a txtime in the past, or if a packet  expires  while\nwaiting for being dequeued.\n\nThis  queueing  discipline is intended to be used by TSN (Time Sensitive Networking) applica‐\ntions, and it exposes a traffic shaping functionality that is commonly documented as  \"Launch\nTime\"  or  \"Time-Based Scheduling\" by vendors and the documentation of network interface con‐\ntrollers.\n\nETF is meant to be installed under another qdisc that maps packet flows to  traffic  classes,\none example is mqprio(8).\n\n",
                "subsections": []
            },
            "PARAMETERS": {
                "content": "clockid\nSpecifies the clock to be used by qdisc's internal timer for measuring time and sched‐\nuling events. The qdisc expects that packets passing through it to be using this  same\nclockid  as the reference of their txtime timestamps. It will drop packets coming from\nsockets that do not comply with that.\n\nFor more information about time and clocks on  Linux,  please  refer  to  time(7)  and\nclockgettime(3).\n\n\ndelta\nAfter enqueueing or dequeueing a packet, the qdisc will schedule its next wake-up time\nfor the next txtime minus this delta value.  This means delta can be used as  a  fudge\nfactor  for  the  scheduler  latency  of  a  system.   This value must be specified in\nnanoseconds.  The default value is 0 nanoseconds.\n\n\ndeadlinemode\nWhen deadlinemode is set, the qdisc will handle txtime with  a  different  semantics,\nchanged from a 'strict' transmission time to a deadline.  In practice, this means dur‐\ning the dequeue flow etf(8) will set the txtime of the packet being dequeued to 'now'.\nThe default is for this option to be disabled.\n\n\noffload\nWhen  offload is set, etf(8) will try to configure the network interface so time-based\ntransmission arbitration is enabled in the controller. This feature  is  commonly  re‐\nferred  to as \"Launch Time\" or \"Time-Based Scheduling\" by the documentation of network\ninterface controllers.  The default is for this option to be disabled.\n\n\nskipsockcheck\netf(8) currently drops any packet which does not have a socket associated with  it  or\nif  the  socket  does not have SOTXTIME socket option set. But, this will not work if\nthe launchtime is set by another entity inside the kernel  (e.g.  some  other  Qdisc).\nSetting  the  skipsockcheck  will  skip  checking  for  a socket associated with the\npacket.\n\n",
                "subsections": []
            },
            "EXAMPLES": {
                "content": "ETF is used to enforce a Quality of Service. It controls when each packets should be dequeued\nand  transmitted,  and can be used for limiting the data rate of a traffic class. To separate\npackets into traffic classes the user may choose mqprio(8), and configure it like this:\n\n# tc qdisc add dev eth0 handle 100: parent root mqprio numtc 3 \\\nmap 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 \\\nqueues 1@0 1@1 2@2 \\\nhw 0\n\nTo replace the current queueing discipline by ETF in traffic class number 0, issue:\n\n# tc qdisc replace dev eth0 parent 100:1 etf \\\nclockid CLOCKTAI delta 300000 offload\n\nWith the options above, etf will be configured to use CLOCKTAI as its clockidt, will sched‐\nule  packets for 300 us before their txtime, and will enable the functionality on that in the\nnetwork interface card. Deadline mode will not be configured for this mode.\n\n",
                "subsections": []
            },
            "AUTHORS": {
                "content": "Jesus Sanchez-Palencia <jesus.sanchez-palencia@intel.com>\nVinicius Costa Gomes <vinicius.gomes@intel.com>\n\n\n\niproute2                                     05 Jul 2018                                      ETF(8)",
                "subsections": []
            }
        }
    }
}