:p_width_1: 400
endif::backend-xhtml11[]
-++++
-<script>
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-
- ga('create', 'UA-75220362-1', 'auto');
- ga('send', 'pageview');
-
-</script>
-++++
+include::trex_ga.asciidoc[]
== Stateless support (Alpha stage)
:p_width_1: 400
endif::backend-xhtml11[]
+include::trex_ga.asciidoc[]
-moved to link:draft_trex_stateless.html[here]
-
-++++
-<script>
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
- ga('create', 'UA-75220362-1', 'auto');
- ga('send', 'pageview');
+moved to link:draft_trex_stateless.html[here]
-</script>
-++++
:quotes.++:
:numbered:
-== change log
-++++
-<script>
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+== change log
- ga('create', 'UA-75220362-1', 'auto');
- ga('send', 'pageview');
+include::trex_ga.asciidoc[]
-</script>
-++++
[options="header",cols="^1,^h,a"]
|=================
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
++++++++++++++
-++++
-<script>
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+include::trex_ga.asciidoc[]
- ga('create', 'UA-75220362-1', 'auto');
- ga('send', 'pageview');
-
-</script>
-++++
== TRex release notes ==
endif::backend-docbook[]
endif::backend-docbook[]
+
+== Release 1.98 ==
+
+* Minor Console issue
+* [red]*Image is broken* see link:http://trex-tgn.cisco.com/youtrack/issue/trex-193[trex-193]
+
+== Release 1.97 ==
+
+* Support pyATS with Python 3/32bit
+* Per stream statistic supported by software for I350/82559/VXNET3
+* [red]*Image is broken* see link:http://trex-tgn.cisco.com/youtrack/issue/trex-193[trex-193]
+
== Release 1.96 ==
* Support pyATS/32bit/Python2.x for TCL
:local_web_server_url: csi-wiki-01:8181/trex
:toclevels: 4
-++++
-<script>
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-
- ga('create', 'UA-75220362-1', 'auto');
- ga('send', 'pageview');
-
-</script>
-++++
+include::trex_ga.asciidoc[]
+
== Introduction
:deckjs_transition: horizontal-slide
:scrollable:
-++++
-<script>
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-
- ga('create', 'UA-75220362-1', 'auto');
- ga('send', 'pageview');
+include::trex_ga.asciidoc[]
-</script>
-++++
++++++++++++++++++
<script type="text/javascript"
:local_web_server_url: csi-wiki-01:8181/trex
:toclevels: 4
-++++
-<script>
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-
- ga('create', 'UA-75220362-1', 'auto');
- ga('send', 'pageview');
-
-</script>
-++++
-
-
+include::trex_ga.asciidoc[]
== Console
:quotes.++:
:numbered:
-++++
-<script>
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-
- ga('create', 'UA-75220362-1', 'auto');
- ga('send', 'pageview');
-
-</script>
-++++
+
+include::trex_ga.asciidoc[]
+
== Introduction
:numbered:
-++++
-<script>
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-
- ga('create', 'UA-75220362-1', 'auto');
- ga('send', 'pageview');
-
-</script>
-++++
+include::trex_ga.asciidoc[]
+
=== TRex traffic generator
:web_server_url: http://trex-tgn.cisco.com/trex
-++++
-<script>
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-
- ga('create', 'UA-75220362-1', 'auto');
- ga('send', 'pageview');
+include::trex_ga.asciidoc[]
-</script>
-++++
== What problem is being solved?
:local_web_server_url: csi-wiki-01:8181/trex
:toclevels: 4
-++++
-<script>
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-
- ga('create', 'UA-75220362-1', 'auto');
- ga('send', 'pageview');
-
-</script>
-++++
+include::trex_ga.asciidoc[]
+
== Change log
:quotes.++:
:numbered:
-++++
-<script>
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-
- ga('create', 'UA-75220362-1', 'auto');
- ga('send', 'pageview');
-
-</script>
-++++
+
+include::trex_ga.asciidoc[]
+
== Introduction
-++++
-<script>
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
- ga('create', 'UA-75220362-1', 'auto');
- ga('send', 'pageview');
+moved to server spec
-</script>
-++++
-
-== VM instructions
-
-=== instructions_type
-
-these are the instructions type
-
-
-==== fix_checksum_ipv4
-
-This command will fix ipv4 checksum header
-
-[source,python]
-----
-{
-ins_name : string ,"fix_checksum_ipv4" ## this command will recalculate the ipv4 checksum
-pkt_offset : uint16_t, number, ## the offset into the packet when the ipv4 header is located
-}
-----
-
-
-==== flow_man_simple
-
-This command will allocate and manipulate flow object data
-For example, allocate a flow variable and object from 10.0.0.1-10.0.0.10
-
-[source,python]
-----
-{
-ins_name: string, "flow_man_simple" ## increment a flow variable
-flow_varible_name: string "name_of_varible" # internal software will allocate the object for this, the name should be unique
-object_size : uint16_t #size of the variable 1,2,4,8 ( max uint64)
-Operation : "inc","dec","random" # the command could be inc from min-max start at init
- # decrement
- # random
-split_by_core : true/false ##do we want to split the range by cores
-init_value : number, size of object_size (max uint64)
-min_value : number, size of object_size (max uint64)
-max_value : number, size of object_size (max uint64)
-}
-----
-
-==== write_to_pkt
-
-This command will copy flow varible into packet offset
-
-[source,c]
-----
-tmp_pkt_data = (flow_var +add_value)
-
-if (big_edian){
- (varible_size )pkt[pkt_offset] =swap(tmp_pkt_data);
-}
-----
-
-
-[source,python]
-----
-{
-ins_name : string , "write_to_pkt" ##
-flow_varible_name : string "name_of_varible" # flow varible value to copy from
-pkt_offset : uint16_t # the offset into the packet to copy the varible
-add_value : 0 (size_of_the_varible)# when writing add this value
-big_edian : bool default true # swap varible when copy yo packet
-}
-----
-
-
-
-=== Examples
-
-=== Examples1
-
-an examples to a programs that change src_ip in specific range for one core
-range of src_ip 10.0.0.1-10.0.0.10 start from 10.0.0.7
-update ipv4 checksum
-ip offset is in 14
-
- offset
-[ 6 - dest mac 0
- 6 - src mac 6
- 2 network 12
-
- ip[0] 14
- ip[4] 18
- ip[8]-TTL,Protocol 22
- ip[12]-src_ip 26
- ip[12]-dest_ip 30
-
-}
-
-The program
-
-[source,python]
-----
-[
-
-{
-ins_name : "flow_data_inc"
-flow_varible_name : "src_ip"
-object_size : 1
-operaqtion : "inc"
-split_by_core : false # one core
-init_value : 7
-min_value : 1
-max_value : 10
-} ,
-
-{
-ins_name : "write_to_pkt"
-flow_varible_name : "src_ip"
-pkt_offset : 26,
-add_value : 0 ,
-big_edian : true
-},
-
-{
-ins_name : "fix_checksum_ipv4"
-pkt_offset : 14
-}
-
-]
-----
-
-=== Examples2
-
-an examples to a programs that change src_ip and dest_ip in specific range for one core
-range of src_ip 10.0.0.1-10.0.0.10 start from 10.0.0.7
-range of dest_ip 48.0.0.1-48.0.0.10 start from 48.0.0.7
-
-update ipv4 checksum
-ip offset is in 14
-
- offset
-[ 6 - dest mac 0
- 6 - src mac 6
- 2 network 12
-
- ip[0] 14
- ip[4] 18
- ip[8]-TTL,Protocol 22
- ip[12]-src_ip 26
- ip[12]-dest_ip 30
-
-}
-
-The program
-
-[source,python]
-----
-
-[
-
-{
-ins_name : "flow_data_inc"
-flow_varible_name : "src_ip"
-object_size : 1
-operaqtion : "inc"
-split_by_core : false # one core
-init_value : 7
-min_value : 1
-max_value : 10
-} ,
-
-{
-ins_name : "write_to_pkt"
-flow_varible_name : "src_ip"
-pkt_offset : 26,
-add_value : 0 ,
-big_edian : true
-},
-
-{
-ins_name : "write_to_pkt"
-flow_varible_name : "src_ip"
-pkt_offset : 30,
-add_value : 0 ,
-big_edian : true
-},
-
-
-{
-ins_name : "fix_checksum_ipv4"
-pkt_offset : 14
-}
-]
-
-----
-
-
-=== Considerations
-
-
-==== Control-Plain check
-
-- Verify that packet offset into fix_checksum_ipv4 is less that pkt_size - min_ip_header
-- There is no stream that are orphaned (not started at startup and nobody call them)
-
-==== Data-Plain check
-
-- Convert the commands to a VM compress command
-- Allocate flow memory per flow for each stream (currently add the memory in each offset)
-- VM runner at startup/ each packet
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-