From bd640666c052a1c770c9c1758c809f68d99af010 Mon Sep 17 00:00:00 2001 From: Dan Klein Date: Mon, 12 Oct 2015 09:11:44 +0300 Subject: solving conflicts --- .../trex_control_plane/doc/api/index.rst | 7 +- .../trex_control_plane/doc/api/json_fields.rst | 464 ++++++++++----------- .../trex_control_plane/doc/client_utils.rst | 5 + .../automation/trex_control_plane/doc/index.rst | 14 + .../doc/packet_generator/examples.rst | 5 + .../doc/packet_generator/export_format.yaml | 47 +++ .../trex_control_plane/doc/requirements.rst | 0 7 files changed, 306 insertions(+), 236 deletions(-) create mode 100755 scripts/automation/trex_control_plane/doc/packet_generator/examples.rst create mode 100755 scripts/automation/trex_control_plane/doc/packet_generator/export_format.yaml delete mode 100755 scripts/automation/trex_control_plane/doc/requirements.rst (limited to 'scripts/automation/trex_control_plane/doc') diff --git a/scripts/automation/trex_control_plane/doc/api/index.rst b/scripts/automation/trex_control_plane/doc/api/index.rst index 6db45160..cfdc6917 100755 --- a/scripts/automation/trex_control_plane/doc/api/index.rst +++ b/scripts/automation/trex_control_plane/doc/api/index.rst @@ -1,9 +1,8 @@ API Reference ============= -The T-Rex API reference section is currently a work in progress. -**T-Rex Modules** +**TRex Modules** .. toctree:: :maxdepth: 4 @@ -11,9 +10,9 @@ The T-Rex API reference section is currently a work in progress. client_code exceptions -**T-Rex JSON Template** +**TRex JSON Template** .. toctree:: :maxdepth: 4 - json_fields \ No newline at end of file + json_fields diff --git a/scripts/automation/trex_control_plane/doc/api/json_fields.rst b/scripts/automation/trex_control_plane/doc/api/json_fields.rst index c921fec4..9e32d23e 100755 --- a/scripts/automation/trex_control_plane/doc/api/json_fields.rst +++ b/scripts/automation/trex_control_plane/doc/api/json_fields.rst @@ -1,233 +1,233 @@ - -TRex JSON Template -================== - -Whenever TRex is publishing live data, it uses JSON notation to describe the data-object. - -Each client may parse it differently, however this page will describe the values meaning when published by TRex server. - - -Main Fields ------------ - -Each TRex server-published JSON object contains data divided to main fields under which the actual data lays. - -These main fields are: - -+-----------------------------+----------------------------------------------------+---------------------------+ -| Main field | Contains | Comments | -+=============================+====================================================+===========================+ -| :ref:`trex-global-field` | Must-have data on TRex run, | | -| | mainly regarding Tx/Rx and packet drops | | -+-----------------------------+----------------------------------------------------+---------------------------+ -| :ref:`tx-gen-field` | Data indicate the quality of the transmit process. | | -| | In case histogram is zero it means that all packets| | -| | were injected in the right time. | | -+-----------------------------+----------------------------------------------------+---------------------------+ -| :ref:`trex-latecny-field` | Latency reports, containing latency data on | - Generated when latency | -| | generated data and on response traffic | test is enabled (``l`` | -| | | param) | -| | | - *typo* on field key: | -+-----------------------------+----------------------------------------------------+ will be fixed on next | -| :ref:`trex-latecny-v2-field`| Extended latency information | release | -+-----------------------------+----------------------------------------------------+---------------------------+ - - -Each of these fields contains keys for field general data (such as its name) and its actual data, which is always stored under the **"data"** key. - -For example, in order to access some trex-global data, the access path would look like:: - - AllData -> trex-global -> data -> desired_info - - - - -Detailed explanation --------------------- - -.. _trex-global-field: - -trex-global field -~~~~~~~~~~~~~~~~~ - - -+--------------------------------+-------+-----------------------------------------------------------+ -| Sub-key | Type | Meaning | -+================================+=======+===========================================================+ -| m_cpu_util | float | CPU utilization (0-100) | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_platform_factor | float | multiplier factor | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_tx_bps | float | total tx bit per second | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_rx_bps | float | total rx bit per second | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_tx_pps | float | total tx packet per second | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_tx_cps | float | total tx connection per second | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_tx_expected_cps | float | expected tx connection per second | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_tx_expected_pps | float | expected tx packet per second | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_tx_expected_bps | float | expected tx bit per second | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_rx_drop_bps | float | drop rate in bit per second | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_active_flows | float | active trex flows | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_open_flows | float | open trex flows from startup (monotonically incrementing) | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_total_tx_pkts | int | total tx in packets | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_total_rx_pkts | int | total rx in packets | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_total_tx_bytes | int | total tx in bytes | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_total_rx_bytes | int | total rx in bytes | -+--------------------------------+-------+-----------------------------------------------------------+ -| opackets-# | int | output packets (per interface) | -+--------------------------------+-------+-----------------------------------------------------------+ -| obytes-# | int | output bytes (per interface) | -+--------------------------------+-------+-----------------------------------------------------------+ -| ipackets-# | int | input packet (per interface) | -+--------------------------------+-------+-----------------------------------------------------------+ -| ibytes-# | int | input bytes (per interface) | -+--------------------------------+-------+-----------------------------------------------------------+ -| ierrors-# | int | input errors (per interface) | -+--------------------------------+-------+-----------------------------------------------------------+ -| oerrors-# | int | input errors (per interface) | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_total_tx_bps-# | float | total transmitted data in bit per second | -+--------------------------------+-------+-----------------------------------------------------------+ -| unknown | int | | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_total_nat_learn_error [#f1]_ | int | | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_total_nat_active [#f2]_ | int | | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_total_nat_no_fid [#f2]_ | int | | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_total_nat_time_out [#f2]_ | int | | -+--------------------------------+-------+-----------------------------------------------------------+ -| m_total_nat_open [#f2]_ | int | | -+--------------------------------+-------+-----------------------------------------------------------+ - - -.. _tx-gen-field: - -tx-gen field -~~~~~~~~~~~~ - -+-------------------+-------+-----------------------------------------------------------+ -| Sub-key | Type | Meaning | -+===================+=======+===========================================================+ -| realtime-hist | dict | histogram of transmission. See extended information about | -| | | histogram object under :ref:`histogram-object-fields`. | -| | | The attribute analyzed is time packet has been sent | -| | | before/after it was intended to be | -+-------------------+-------+-----------------------------------------------------------+ -| unknown | int | | -+-------------------+-------+-----------------------------------------------------------+ - -.. _trex-latecny-field: - -trex-latecny field -~~~~~~~~~~~~~~~~~~ - -+---------+-------+---------------------------------------------------------+ -| Sub-key | Type | Meaning | -+=========+=======+=========================================================+ -| avg-# | float | average latency in usec (per interface) | -+---------+-------+---------------------------------------------------------+ -| max-# | float | max latency in usec from the test start (per interface) | -+---------+-------+---------------------------------------------------------+ -| c-max-# | float | max in the last 1 sec window (per interface) | -+---------+-------+---------------------------------------------------------+ -| error-# | float | errors in latency packets (per interface) | -+---------+-------+---------------------------------------------------------+ -| unknown | int | | -+---------+-------+---------------------------------------------------------+ - -.. _trex-latecny-v2-field: - -trex-latecny-v2 field -~~~~~~~~~~~~~~~~~~~~~ - -+--------------------------------------+-------+--------------------------------------+ -| Sub-key | Type | Meaning | -+======================================+=======+======================================+ -| cpu_util | float | rx thread cpu % (this is not trex DP | -| | | threads cpu%%) | -+--------------------------------------+-------+--------------------------------------+ -| port-# | | Containing per interface | -| | dict | information. See extended | -| | | information under ``port-# -> | -| | | key_name -> sub_key`` | -+--------------------------------------+-------+--------------------------------------+ -| port-#->hist | dict | histogram of latency. See extended | -| | | information about histogram object | -| | | under :ref:`histogram-object-fields`.| -+--------------------------------------+-------+--------------------------------------+ -| port-#->stats | | Containing per interface | -| | dict | information. See extended | -| | | information under ``port-# -> | -| | | key_name -> sub_key`` | -+--------------------------------------+-------+--------------------------------------+ -| port-#->stats->m_tx_pkt_ok | int | total of try sent packets | -+--------------------------------------+-------+--------------------------------------+ -| port-#->stats->m_pkt_ok | int | total of packets sent from hardware | -+--------------------------------------+-------+--------------------------------------+ -| port-#->stats->m_no_magic | int | rx error with no magic | -+--------------------------------------+-------+--------------------------------------+ -| port-#->stats->m_no_id | int | rx errors with no id | -+--------------------------------------+-------+--------------------------------------+ -| port-#->stats->m_seq_error | int | error in seq number | -+--------------------------------------+-------+--------------------------------------+ -| port-#->stats->m_length_error | int | | -+--------------------------------------+-------+--------------------------------------+ -| port-#->stats->m_rx_check | int | packets tested in rx | -+--------------------------------------+-------+--------------------------------------+ -| unknown | int | | -+--------------------------------------+-------+--------------------------------------+ - - - -.. _histogram-object-fields: - -Histogram object fields -~~~~~~~~~~~~~~~~~~~~~~~ - -The histogram object is being used in number of place throughout the JSON object. -The following section describes its fields in detail. - - -+-----------+-------+-----------------------------------------------------------------------------------+ -| Sub-key | Type | Meaning | -+===========+=======+===================================================================================+ -| min_usec | int | min attribute value in usec. pkt with latency less than this value is not counted | -+-----------+-------+-----------------------------------------------------------------------------------+ -| max_usec | int | max attribute value in usec | -+-----------+-------+-----------------------------------------------------------------------------------+ -| high_cnt | int | how many packets on which its attribute > min_usec | -+-----------+-------+-----------------------------------------------------------------------------------+ -| cnt | int | total packets from test startup | -+-----------+-------+-----------------------------------------------------------------------------------+ -| s_avg | float | average value from test startup | -+-----------+-------+-----------------------------------------------------------------------------------+ -| histogram | | histogram of relevant object by the following keys: | -| | array | - key: value in usec | -| | | - val: number of packets | -+-----------+-------+-----------------------------------------------------------------------------------+ - - -Access Examples ---------------- - - - -.. rubric:: Footnotes - -.. [#f1] Available only in NAT and NAT learning operation (``learn`` and ``learn-verify`` flags) - + +TRex JSON Template +================== + +Whenever TRex is publishing live data, it uses JSON notation to describe the data-object. + +Each client may parse it differently, however this page will describe the values meaning when published by TRex server. + + +Main Fields +----------- + +Each TRex server-published JSON object contains data divided to main fields under which the actual data lays. + +These main fields are: + ++-----------------------------+----------------------------------------------------+---------------------------+ +| Main field | Contains | Comments | ++=============================+====================================================+===========================+ +| :ref:`trex-global-field` | Must-have data on TRex run, | | +| | mainly regarding Tx/Rx and packet drops | | ++-----------------------------+----------------------------------------------------+---------------------------+ +| :ref:`tx-gen-field` | Data indicate the quality of the transmit process. | | +| | In case histogram is zero it means that all packets| | +| | were injected in the right time. | | ++-----------------------------+----------------------------------------------------+---------------------------+ +| :ref:`trex-latecny-field` | Latency reports, containing latency data on | - Generated when latency | +| | generated data and on response traffic | test is enabled (``l`` | +| | | param) | +| | | - *typo* on field key: | ++-----------------------------+----------------------------------------------------+ will be fixed on next | +| :ref:`trex-latecny-v2-field`| Extended latency information | release | ++-----------------------------+----------------------------------------------------+---------------------------+ + + +Each of these fields contains keys for field general data (such as its name) and its actual data, which is always stored under the **"data"** key. + +For example, in order to access some trex-global data, the access path would look like:: + + AllData -> trex-global -> data -> desired_info + + + + +Detailed explanation +-------------------- + +.. _trex-global-field: + +trex-global field +~~~~~~~~~~~~~~~~~ + + ++--------------------------------+-------+-----------------------------------------------------------+ +| Sub-key | Type | Meaning | ++================================+=======+===========================================================+ +| m_cpu_util | float | CPU utilization (0-100) | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_platform_factor | float | multiplier factor | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_tx_bps | float | total tx bit per second | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_rx_bps | float | total rx bit per second | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_tx_pps | float | total tx packet per second | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_tx_cps | float | total tx connection per second | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_tx_expected_cps | float | expected tx connection per second | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_tx_expected_pps | float | expected tx packet per second | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_tx_expected_bps | float | expected tx bit per second | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_rx_drop_bps | float | drop rate in bit per second | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_active_flows | float | active trex flows | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_open_flows | float | open trex flows from startup (monotonically incrementing) | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_total_tx_pkts | int | total tx in packets | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_total_rx_pkts | int | total rx in packets | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_total_tx_bytes | int | total tx in bytes | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_total_rx_bytes | int | total rx in bytes | ++--------------------------------+-------+-----------------------------------------------------------+ +| opackets-# | int | output packets (per interface) | ++--------------------------------+-------+-----------------------------------------------------------+ +| obytes-# | int | output bytes (per interface) | ++--------------------------------+-------+-----------------------------------------------------------+ +| ipackets-# | int | input packet (per interface) | ++--------------------------------+-------+-----------------------------------------------------------+ +| ibytes-# | int | input bytes (per interface) | ++--------------------------------+-------+-----------------------------------------------------------+ +| ierrors-# | int | input errors (per interface) | ++--------------------------------+-------+-----------------------------------------------------------+ +| oerrors-# | int | input errors (per interface) | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_total_tx_bps-# | float | total transmitted data in bit per second | ++--------------------------------+-------+-----------------------------------------------------------+ +| unknown | int | | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_total_nat_learn_error [#f1]_ | int | | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_total_nat_active [#f2]_ | int | | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_total_nat_no_fid [#f2]_ | int | | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_total_nat_time_out [#f2]_ | int | | ++--------------------------------+-------+-----------------------------------------------------------+ +| m_total_nat_open [#f2]_ | int | | ++--------------------------------+-------+-----------------------------------------------------------+ + + +.. _tx-gen-field: + +tx-gen field +~~~~~~~~~~~~ + ++-------------------+-------+-----------------------------------------------------------+ +| Sub-key | Type | Meaning | ++===================+=======+===========================================================+ +| realtime-hist | dict | histogram of transmission. See extended information about | +| | | histogram object under :ref:`histogram-object-fields`. | +| | | The attribute analyzed is time packet has been sent | +| | | before/after it was intended to be | ++-------------------+-------+-----------------------------------------------------------+ +| unknown | int | | ++-------------------+-------+-----------------------------------------------------------+ + +.. _trex-latecny-field: + +trex-latecny field +~~~~~~~~~~~~~~~~~~ + ++---------+-------+---------------------------------------------------------+ +| Sub-key | Type | Meaning | ++=========+=======+=========================================================+ +| avg-# | float | average latency in usec (per interface) | ++---------+-------+---------------------------------------------------------+ +| max-# | float | max latency in usec from the test start (per interface) | ++---------+-------+---------------------------------------------------------+ +| c-max-# | float | max in the last 1 sec window (per interface) | ++---------+-------+---------------------------------------------------------+ +| error-# | float | errors in latency packets (per interface) | ++---------+-------+---------------------------------------------------------+ +| unknown | int | | ++---------+-------+---------------------------------------------------------+ + +.. _trex-latecny-v2-field: + +trex-latecny-v2 field +~~~~~~~~~~~~~~~~~~~~~ + ++--------------------------------------+-------+--------------------------------------+ +| Sub-key | Type | Meaning | ++======================================+=======+======================================+ +| cpu_util | float | rx thread cpu % (this is not trex DP | +| | | threads cpu%%) | ++--------------------------------------+-------+--------------------------------------+ +| port-# | | Containing per interface | +| | dict | information. See extended | +| | | information under ``port-# -> | +| | | key_name -> sub_key`` | ++--------------------------------------+-------+--------------------------------------+ +| port-#->hist | dict | histogram of latency. See extended | +| | | information about histogram object | +| | | under :ref:`histogram-object-fields`.| ++--------------------------------------+-------+--------------------------------------+ +| port-#->stats | | Containing per interface | +| | dict | information. See extended | +| | | information under ``port-# -> | +| | | key_name -> sub_key`` | ++--------------------------------------+-------+--------------------------------------+ +| port-#->stats->m_tx_pkt_ok | int | total of try sent packets | ++--------------------------------------+-------+--------------------------------------+ +| port-#->stats->m_pkt_ok | int | total of packets sent from hardware | ++--------------------------------------+-------+--------------------------------------+ +| port-#->stats->m_no_magic | int | rx error with no magic | ++--------------------------------------+-------+--------------------------------------+ +| port-#->stats->m_no_id | int | rx errors with no id | ++--------------------------------------+-------+--------------------------------------+ +| port-#->stats->m_seq_error | int | error in seq number | ++--------------------------------------+-------+--------------------------------------+ +| port-#->stats->m_length_error | int | | ++--------------------------------------+-------+--------------------------------------+ +| port-#->stats->m_rx_check | int | packets tested in rx | ++--------------------------------------+-------+--------------------------------------+ +| unknown | int | | ++--------------------------------------+-------+--------------------------------------+ + + + +.. _histogram-object-fields: + +Histogram object fields +~~~~~~~~~~~~~~~~~~~~~~~ + +The histogram object is being used in number of place throughout the JSON object. +The following section describes its fields in detail. + + ++-----------+-------+-----------------------------------------------------------------------------------+ +| Sub-key | Type | Meaning | ++===========+=======+===================================================================================+ +| min_usec | int | min attribute value in usec. pkt with latency less than this value is not counted | ++-----------+-------+-----------------------------------------------------------------------------------+ +| max_usec | int | max attribute value in usec | ++-----------+-------+-----------------------------------------------------------------------------------+ +| high_cnt | int | how many packets on which its attribute > min_usec | ++-----------+-------+-----------------------------------------------------------------------------------+ +| cnt | int | total packets from test startup | ++-----------+-------+-----------------------------------------------------------------------------------+ +| s_avg | float | average value from test startup | ++-----------+-------+-----------------------------------------------------------------------------------+ +| histogram | | histogram of relevant object by the following keys: | +| | array | - key: value in usec | +| | | - val: number of packets | ++-----------+-------+-----------------------------------------------------------------------------------+ + + +Access Examples +--------------- + + + +.. rubric:: Footnotes + +.. [#f1] Available only in NAT and NAT learning operation (``learn`` and ``learn-verify`` flags) + .. [#f2] Available only in NAT operation (``learn`` flag) \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/doc/client_utils.rst b/scripts/automation/trex_control_plane/doc/client_utils.rst index 122ae310..32728a57 100755 --- a/scripts/automation/trex_control_plane/doc/client_utils.rst +++ b/scripts/automation/trex_control_plane/doc/client_utils.rst @@ -2,6 +2,11 @@ Client Utilities ================ +.. toctree:: + :maxdepth: 2 + + packet_generator/index + TRex YAML generator ------------------- diff --git a/scripts/automation/trex_control_plane/doc/index.rst b/scripts/automation/trex_control_plane/doc/index.rst index 62fd9975..10803cb0 100755 --- a/scripts/automation/trex_control_plane/doc/index.rst +++ b/scripts/automation/trex_control_plane/doc/index.rst @@ -18,6 +18,13 @@ To understand the entirely how the API works and how to set up the server side, **Use the table of contents below or the menu to your left to navigate through the site** +Getting Started +=============== +.. toctree:: + :maxdepth: 2 + + installation + API Reference ============= .. toctree:: @@ -39,6 +46,13 @@ Usage Examples usage_examples +About TRex +========== +.. toctree:: + :maxdepth: 2 + + All about TRex + Indices and tables ================== diff --git a/scripts/automation/trex_control_plane/doc/packet_generator/examples.rst b/scripts/automation/trex_control_plane/doc/packet_generator/examples.rst new file mode 100755 index 00000000..bff1ef7f --- /dev/null +++ b/scripts/automation/trex_control_plane/doc/packet_generator/examples.rst @@ -0,0 +1,5 @@ + +Packet Builder Usage Examples +============================= + +Here I'll add usage examples, very similar to those I added to RPC document \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/doc/packet_generator/export_format.yaml b/scripts/automation/trex_control_plane/doc/packet_generator/export_format.yaml new file mode 100755 index 00000000..9f8c8f7b --- /dev/null +++ b/scripts/automation/trex_control_plane/doc/packet_generator/export_format.yaml @@ -0,0 +1,47 @@ +#################################################### +#### TRex packet export format #### +#################################################### + +# PACKET REP - OPTION #1 +packet: + is_pcap : YES/NO # <1> + binary : [] # <2> + pcap : path/to/pcap/file.pcap # <3> + meta : any metadata wished to # <4> + +# PACKET REP - OPTION #2 +packet: + data : [] / path/to/pcap/file.pcap # <5> + meta : any metadata wished to # <4> + +vm: # <6> + - vm instruction #1 + - vm instruction #2 + ... + - vm instruction #N + + +################################### +#### Comments #### +################################### +# +# <1>: is_pcap is a boolean field that indicates if packet is transferred by pcap referencs +# ('YES') or binary representation ('NO'). +# +# <2>: binary field encodes the packet in binary representation. in a sequence (array) data. +# Each array item is an integer ranging 0-255. +# **LEAVE BLANK IF USING PCAP REFERENCE** +# +# <3>: path to the linked pcap file. Make sure to provide path with reading credentials. +# **LEAVE BLANK IF USING BINARY REP FOR THE PACKET** +# +# <4>: meta data is any JSON formatted data ment to be passed on. +# +# <5>: data field can be both binary representation or pcap file refernce, +# without the need for user's explicit typing. +# The application logic differs between the cases by the object type +# (array/string ending in '.pcap') +# Less configuration, little more confusing, LESS similar to RPC spec +# +# <6>: vm instructions passed in array representation (sequence). +# Each instruction is deifned according to the structures of the supported VM instructions. \ No newline at end of file diff --git a/scripts/automation/trex_control_plane/doc/requirements.rst b/scripts/automation/trex_control_plane/doc/requirements.rst deleted file mode 100755 index e69de29b..00000000 -- cgit 1.2.3-korg