<?xml version="1.0" encoding="UTF-8"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
    which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
    There has to be one entity for each item to be referenced. 
    An alternate method (rfc include) is described in the references. -->

<!ENTITY RFC1918 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.1918.xml">
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2544 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2544.xml">
<!ENTITY RFC4814 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4814.xml">
<!ENTITY RFC5180 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5180.xml">
<!ENTITY RFC8174 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8219 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8219.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
    please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
    (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
    (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="info" docName="draft-lencse-bmwg-multiple-ip-addresses-04" ipr="trust200902">

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
          full title is longer than 39 characters -->

    <title abbrev="Multiple IP Addresses">Recommendations for using Multiple IP Addresses in Benchmarking Tests</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Gábor Lencse" initials="G." surname="Lencse">
      <organization>Széchenyi István University</organization>
      <address>
        <postal>
          <street>Egyetem tér 1.</street>
          <!-- Reorder these if your country does things differently -->
          <city>Győr</city>
          <region></region>
          <code>H-9026</code>
          <country>Hungary</country>
        </postal>
        <phone></phone>
        <email>lencse@sze.hu</email>
        <uri></uri>
      </address>
    </author>

    <author fullname="Keiichi Shima" initials="K." surname="Shima">
      <organization>SoftBank Corp.</organization>
      <address>
        <postal>
          <street>1-7-1 Kaigan</street>
          <city>Minato-ku</city>
          <region>Tokyo</region>
          <code>105-7529</code>
          <country>Japan</country>
        </postal>
        <phone></phone>
        <email>shima@wide.ad.jp</email>
        <uri>https://softbank.co.jp/</uri>
      </address>
    </author>

    <date year="2025" />

    <!-- Meta-data Declarations -->

    <area>Operations and Management Area</area>

    <workgroup>Benchmarking Methodology Working Group</workgroup>

    <!-- WG name at the upperleft corner of the doc,
          IETF is fine for individual submissions.  
    If this element is not present, the default is "Network Working Group",
          which is used by the RFC Editor as a nod to the history of the IETF. -->

    <keyword>Benchmarking, Measurement Procedure, Receive-Side Scaling, Multiple IP Addresses</keyword>

    <!-- Keywords will be incorporated into HTML output
          files in a meta tag but they have no effect on text or nroff
          output. If you submit your draft to the RFC Editor, the
          keywords will be used for the search engine. -->

    <abstract>
      <t>RFC 2544 has defined a benchmarking methodology for network
      interconnect devices. Its test frame format contained fixed IP addresses 
	  and fixed port numbers. RFC 4814 introduced pseudorandom port numbers 
	  but used a single source and destination IP address pair 
	  when testing with a single destination network. This limitation may cause an 
	  issue when the device under test uses the Receive-Side Scaling (RSS) mechanism 
	  in the packet processing flow.  RSS has two implementations: 
	  the first only includes the IP addresses, whereas the second also 
	  includes the port numbers in the tuple used for hashing. 
	  Benchmarking tests that use a single IP address pair and RFC 4814 
	  pseudorandom port numbers are biased against the first type of RSS implementation
	  because traffic is not distributed among the processing elements. 
	  This document recommends the usage of pseudorandom IP addresses in a similar manner
	  as RFC 4814 did with the port numbers.</t>
	  <t>If accepted, this document updates all affected RFCs, including RFC 2544, 
	  RFC 4814, RFC 5180, RFC 8219.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t><xref target="RFC2544"/> has defined a comprehensive benchmarking 
	  methodology for network interconnect devices, which is still in use. It was 
	  amended by several RFCs, which did not formally update it. <xref target="RFC4814"/> 
	  introduced pseudorandom port numbers (instead of fixed ones). 
	  <xref target="RFC5180"/> addressed IPv6 specificities and added 
	  technology updates but declared IPv6 transition technologies
      out of scope. <xref target="RFC8219"/> addressed the IPv6 transition 
	  technologies.</t>  
	  <t>Receive-Side Scaling (RSS) aims to distribute the workload caused by packet 
	  arrivals among the CPU cores evenly to achieve high performance. It has two types 
	  of implementations: the first one only includes the IP addresses, whereas 
	  the second one also includes the port numbers into the tuple used for hashing <xref target="RSS2014"/>. 
	  <xref target="RFC4814"/> compliant testers work properly in the second case; however, 
	  the pseudorandom port numbers cannot provide entropy if the Device Under Test (DUT) follows 
	  the first type of RSS implementation; therefore, these devices produce poor 
	  benchmarking results in <xref target="RFC4814"/> compliant laboratory tests, whereas 
	  they can exhibit high performance in production environments where the usage of 
	  multiple IP addresses ensures the entropy for the proper operation of their 
	  RSS implementation. Therefore, the conditions of laboratory tests should be improved 
	  to ensure unbiased performance testing. To that end, this document examines 
	  how the usage of multiple IP addresses can be introduced in the performance 
	  testing of network interconnect devices using IPv4 or IPv6 addresses, observing 
	  the limitations of the ranges of special purpose IPv4 and IPv6 addresses reserved 
	  for benchmarking measurements. Practical recommendations are 
	  given for the usage of pseudorandom source and destination IP addresses in 
	  the case of both IPv4 and IPv6 following the approach of RFC 4814 regarding 
	  the port numbers and also considering the effect of the growing number of ARP 
	  or NDP table entries.</t> 

		  
      <section>
        <name>Requirements Language</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
          "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT
          RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
          interpreted as described in BCP 14 <xref target="RFC2119"/>
          <xref target="RFC8174"/> when, and only when, they appear in
          all capitals, as shown here.</t>
      </section>
      <!-- [CHECK] The 'Requirements Language' section is optional -->
	  
	  
    </section>

    <section anchor="multi-ip" title="Recommendation for Multiple IP Addresses">
	
	<t> First, the potential ranges are examined in the case of IPv4 and IPv6, 
	then considerations regarding the "optimal" number of IP addresses and the 
	usage of gateways are made, and finally, a recommendation is given.</t>
	
	  <section anchor="multi-ipv4" title="Potential Ranges for IPv4 Addresses">
	  
	    <t>The 198.18.0.0/15 IPv4 address range was reserved for benchmarking tests.
		It is divided into two halves: 198.18.0.0/16 and 198.19.0.0/16 are to be used 
		on the two sides of the test setup. Considering the requirement of <xref target="RFC2544"/> 
		regarding the IP addresses, the test suite SHOULD be first run with a single 
		source and destination address pair. Then, the destination networks should be 
		random using the 16-23 bits of the network addresses mentioned above. 
		The Device Under Test (DUT) is assigned the first address of each
		network, and the Tester can be assigned, for example, the second address 
		from each network. That is, 198.18.R.1/24 and 198.19.R.1/24 are assigned to the DUT; 
		198.18.R.2/24 and 198.19.R.2/24 are assigned to the Tester, where R is pseudorandom 
		in the 0-255 interval.</t>
		<t>The above framework imposes serious limitations on the design of how multiple 
		IP addresses can be used. It means that when, e.g., the very first networks 
		(198.18.0.0/24 and 198.19.0.0/24) are used at each side of the test setup, 
		the maximum range of the IP addresses assigned to the Tester can be 198.18.0.2/24-198.18.0.254/24
		and 198.19.0.2/24-198.19.0.254/24, as shown in <xref target="test_setup_ipv4_8bit"/>. 
		When 256 destination networks are used, then the 16-23 bits identifying the destination 
		networks also contribute to the entropy provided to the hash function. 
		When only a single destination network is used, then the 16-23 bits can also be 
		leveraged to generate a higher number of IP addresses, thus their ranges can be: 
		198.18.0.2/16-198.18.255.254/16 and 198.19.0.2/16-198.19.255.254/16 as shown 
		in <xref target="test_setup_ipv4_16bit"/>. In both cases, the Tester and the DUT 
		are in the same networks, that is, they are connected directly without using gateways.
		Conversely, the corresponding network interfaces of the Tester and the DUT may be 
		connected through gateways. Then the network interface of the DUT uses an IP address 
		from a different network than the corresponding interface of the Tester, and the network 
		interface of the DUT sends the packets to the gateway, which is set as the next hop router
		towards the network assigned to the corresponding interface of the Tester, as shown in
		<xref target="test_setup_ipv4_16bit-gw"/>. (It is noted that <xref target="RFC1918"/> 
		private IP addresses were used due to the insufficient IP address range reserved for 
		benchmarking.)</t>

       <figure anchor="test_setup_ipv4_8bit" align="center" 
	     title="Test setup for benchmarking IPv4 routers when using multiple destination networks (Tester and DUT are directly connected)">
          <preamble></preamble>

          <artwork align="left"><![CDATA[
198.18.0.2/24-198.18.0.254/24      198.19.0.2/24-198.19.0.254/24
           \  +----------------------------------+  /
            \ |                                  | /
+-------------|              Tester              |<------------+
|             |                                  |             |
|             +----------------------------------+             |
|                                                              |
|             +----------------------------------+             |
|             |                                  |             |
+------------>|        DUT: IPv4 router          |-------------+
198.18.0.1/24 |                                  | 198.19.0.1/24
              +----------------------------------+                            
            ]]></artwork>

        <postamble></postamble>
        </figure>

       <figure anchor="test_setup_ipv4_16bit" align="center" 
	     title="Test setup for benchmarking IPv4 routers when using a single destination network (Tester and DUT are directly connected)">
          <preamble></preamble>

          <artwork align="left"><![CDATA[
198.18.0.2/16-198.18.255.254/16  198.19.0.2/16-198.19.255.254/16
           \  +----------------------------------+  /
            \ |                                  | /
+-------------|              Tester              |<------------+
|             |                                  |             |
|             +----------------------------------+             |
|                                                              |
|             +----------------------------------+             |
|             |                                  |             |
+------------>|        DUT: IPv4 router          |-------------+
198.18.0.1/16 |                                  | 198.19.0.1/16
              +----------------------------------+
            ]]></artwork>

        <postamble></postamble>
        </figure>
		
       <figure anchor="test_setup_ipv4_16bit-gw" align="center" 
	     title="Test setup for benchmarking IPv4 routers when using a single destination network (gateways are used)">
          <preamble></preamble>

          <artwork align="left"><![CDATA[
198.18.0.1/16-198.18.255.254/16  198.19.0.1/16-198.19.255.254/16
           \  +----------------------------------+  /
            \ |                                  | /
+-------------|              Tester              |<------------+
|             |                                  |             |
|             +----------------------------------+             |
|                                                              |
|             +----------------------------------+             |
|             |                                  |             |
+------------>|        DUT: IPv4 router          |-------------+
 10.0.0.1/24  |                                  | 10.0.1.1/24
              +----------------------------------+

routes in the DUT:  destination network      next hop
                    -------------------      -------- 
                    198.18.0.0/16            10.0.0.2
                    198.19.0.0/16            10.0.1.2
            ]]></artwork>

        <postamble></postamble>
        </figure>		

      </section>
	  
	  <section anchor="multi-ipv6" title="Potential Ranges for IPv6 Addresses">

	    <t>The 2001:2::/48 IPv6 address range, which was reserved for benchmarking tests, is  
		large enough. If it is split into two halves to be used on the two sides of 
		the test setup as 2001:2::/49 and 2001:2:8000::/49, the ranges are abundant. Even if 
		their first /56 subnets (2001:2::/56 and 2001:2:8000::/56) are enough to ensure 256 
		networks on each side of the test setup. As these networks are of /64 size, their host 
		ID parts are vastly abundant. For convenience considerations, we recommend the usage of 
		their 96-111 bits to generate potentially 65536 different IP addresses, as shown in 
		<xref target="test_setup_ipv6"/> in the case when a single destination network is used
		and the Tester and the DUT are connected directly, without gateways. 
		(When needed, the 256 destination networks can be described by the 56-63, bits as 
		mentioned before.) <xref target="test_setup_ipv6-gw"/> shows the case when gateways are 
		used.</t> 	  

       <figure anchor="test_setup_ipv6" align="center" 
	     title="Test setup for benchmarking IPv6 routers (Tester and DUT are directly connected)">
          <preamble></preamble>

          <artwork align="left"><![CDATA[
2001:2::[0000-ffff]:2/64         2001:2:0:8000::[0000-ffff]:2/64
           \  +----------------------------------+  /
            \ |                                  | /
+-------------|              Tester              |<------------+
|             |                                  |             |
|             +----------------------------------+             |
|                                                              |
|             +----------------------------------+             |
|             |                                  |             |
+------------>|        DUT: IPv6 router          |-------------+
            / |                                  | \
           /  +----------------------------------+  \
   2001:2::1/64                              2001:2:0:8000::1/64	  
            ]]></artwork>

        <postamble></postamble>
        </figure>	  

       <figure anchor="test_setup_ipv6-gw" align="center" 
	     title="Test setup for benchmarking IPv6 routers (gateways are used)">
          <preamble></preamble>

          <artwork align="left"><![CDATA[
2001:2::[0000-ffff]:2/64         2001:2:0:8000::[0000-ffff]:2/64
           \  +----------------------------------+  /
            \ |                                  | /
+-------------|              Tester              |<------------+
|             |                                  |             |
|             +----------------------------------+             |
|                                                              |
|             +----------------------------------+             |
|             |                                  |             |
+------------>|        DUT: IPv6 router          |-------------+
            / |                                  | \
           /  +----------------------------------+  \
2001:2:0:1000::1/64                          2001:2:0:9000::1/64

routes in the DUT:  destination network      next hop
                    -------------------      -------- 
                    2001:2::/64              2001:2:0:1000::2/64
                    2001:2:0:8000::/64       2001:2:0:9000::2/64	  
            ]]></artwork>

        <postamble></postamble>
        </figure>

	  
      </section>

	  <section anchor="multi-actual-ranges" title="Considerations for the IP Address Ranges to be Used">

	    <t>On the one hand, the more IP addresses are used, the more entropy is ensured and thus 
		the most even distribution of the load over the processing elements can be expected. 
		However, on the other hand, the usage of multiple IP addresses has its costs when no 
		gateways are used: multiple Address Resolution Protocol (ARP for IPv4) or Neighbor 
		Discovery Protocol (NDP, for IPv6) table entries are used. Increasing them over a 
		few thousand may have a deteriorating effect on the performance of the DUT. This effect 
		does exist when gateways are used because the DUT sends the packets to the gateways, and 
		thus only their IPv4 or IPv6 addresses needed to be stored in the ARP or NDP table of the DUT.</t>
	    <t>It is noted that under typical operating conditions, a router is not connected 
		directly to a high number of devices. If it is a backbone router, it is connected directly 
		to several other routers. If it is a local router, it is connected directly to a single 
		upstream router (or, at most, a few of them) and (through a switch) to the local hosts, 
		the number of which is unlikely to be higher than a few thousand. 
		In both cases, a high number of different IP addresses may provide entropy for hashing without 
		causing pressure on the ARP or NDP tables of the router.</t>
	  
      </section>

      <section anchor="recommendation" title="Recommendation for Testing with Multiple IP Addresses">

	    <t>Based on the theoretical considerations in <xref target="multi-actual-ranges"/> that
		<list style="numbers">
		<t> it is desirable to use as high number of IP addresses as possible</t>
		<t> routers do not need to handle a high number of neighbors under typical operating 
		conditions</t>
		</list>
		the usage of the maximum possible number of IP addresses and the test setups with gateways 
		shown in <xref target="test_setup_ipv4_16bit-gw"/> 
		and <xref target="test_setup_ipv6-gw"/> are recommended.</t>
		
		<t>It is noted that the maximum possible number of IPv4 addresses are 253 and 65533 
		when 8 bits and 16 bits are available. In the case of IPv6, it is 65536.</t>
		
		<t> This recommendation has been justified by the measurement results mentioned 
		in <xref target="experience"/>.</t>	
	
	  </section> 
	  
    </section>

    <section anchor="implementation" title="Implementation of the Recommended Solution">

	    <t>The recommended solution has been implemented in siitperf <xref target="SIITPERF"/> 
		as a proof of concept. Multiple IPv4 and IPv6 addresses are supported from commit number 
		165cb7f on September 6, 2023. The details of the implementation can be found in 
		<xref target="LEN2024"/>.</t>	
	
	</section>
	
    <section anchor="experience" title="Experiments and Results">
	
	  <section anchor="exp-difference" title="Demonstration of the Difference">

	    <t>The effectiveness of the solution was also demonstrated in <xref target="LEN2024"/>.
		OpenBSD was chosen as the operating system of the DUT. It uses the first type of RSS solution: 
		only the IP addresses are used by the hash function. It was examined how much difference the usage of multiple IP addresses 
		makes in the IPv4 and IPv6 throughput performance. It should be noted that IP packet forwarding 
		under OpenBSD was single-threaded until version 7.1. The ChangeLog of OpenBSD 7.2 <xref target="OBSD72CL"/> 
		states, "Activated parallel IP forwarding, starting 4 softnet tasks but limiting the usage to 
		the number of CPUs."</t> 
		<t>The test setup for the IPv4 and IPv6 measurements was according to <xref target="test_setup_ipv4_16bit"/> 
		and <xref target="test_setup_ipv6"/>, respectively. However, only 1000 different IP addresses 
		were used at each side of the test setups to limit the potential performance degradation caused 
		by the high number of ARP or NDP table entries.</t> 
		<t>The DUT was a Dell PowerEdge R730 server with two 3.2GHz Intel Xeon E5-2667 v3 CPUs having 
		8 cores each, 8x16GB 2133MHz DDR4 SDRAM (accessed quad channel), and Intel X540-T2 10GbE network 
		adapter. Hyper-threading was switched off in the BIOS.</t>
		<t>All tests were executed 10 times, and the median, minimum and maximum values of the throughput 
		results were calculated. In the case of IPv4 packet forwarding, the usage of pseudorandom IP addresses  
		caused a highly significant (more than 3-fold) performance increase compared to the case when fixed 
		IP addresses were used. In the case of IPv6, the throughput values were significantly lower, and 
		the increase caused by the usage of pseudorandom IP addresses was only about 50%, but it is still 
		a well-visible difference. All the details of the measurements can be found in <xref target="LEN2024"/>.</t>	
      </section>
	  
	  <section anchor="exp-number" title="Examination of the Effect of the Number of IP Addresses Used">
	  
	    <section anchor="exp-num-direct" title="Without Gateways">
	    <t>To examine how the number of IP addresses used affects the throughput, the same hardware 
		described in <xref target="exp-difference"/> was used, but the DUT had the Debian Linux 11.7 operating
		system to be able to fully utilize all CPU cores, and the first type of RSS was set using the 
		"ethtool" command. The IPv4 and IPv6 test setups followed <xref target="test_setup_ipv4_16bit"/> 
		and <xref target="test_setup_ipv6"/>, respectively.</t>
		<t>Two measurement series were performed: one with IPv4 and the other with IPv6. As for the IPv4 addresses, 
		their number was doubled in the consecutive experiments: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 
		1k, 2k, 4k, 8k, 16k, 32k, and 64k-3 IPv4 addresses were used. Thus, the number of IPv4 address 
		combinations (supplying entropy to RSS) were 1x1, 2x2, 4x4, 8x8, 16x16, 32x32, ... , 16kx16k, 
		32kx32k, and (64k-3)x(64k-3). The same number of IPv6 addresses were used, except that the 
		last value was exactly 64k.</t>
		<t>The trend of the results followed the same pattern for IPv4 and IPv6. The throughput increased 
		steeply during the first few consecutive experiments, then it was nearly constant for a relatively 
		wide range of the number of IP addresses, and finally, it deteriorated significantly.</t>
		<t>Although the shallow observer could conclude that the above experienced nearly constant throughput for 
		a wide range of the number of IP addresses, making it easy to choose a "good enough" number, the 
		authors contend the opposite. On the one hand, in the general case, the number of CPU cores of the 
		DUT may be significantly higher than in the above case. On the other hand, the beginning of the 
		performance degradation may depend on several factors, such as ARP or NDP table implementation, 
		the sizes of the given level (L1, L2, etc.) caches of the CPU, etc. Moreover, it is problematic 
		if the testing method needs to be aware of the details of the internal structure and operation of the DUT. 
		Finally, performing a series of measurements (like above) is highly time-consuming, and thus, it should be 
		avoided.</t>
		</section>

	    <section anchor="exp-num-gw" title="With Gateways">
	    <t>To examine the throughput of IPv4 and IPv6 packet forwarding when gateways are used, the test 
		setups shown in <xref target="test_setup_ipv4_16bit-gw"/> and <xref target="test_setup_ipv6-gw"/> 
		were employed, respectively. And the test system was the same as in <xref target="exp-num-direct"/>.  
		The number of IPv4 and IPv6 addresses was 64k-2 and 64k, respectively. To have a basis for comparison, 
		the IPv4 and IPv6 packet forwarding throughput measurements were also performed using single IPv4 
		and IPv6 address pairs plus <xref target="RFC2544"/> pseudorandom port numbers with the second 
		type of RSS setting, where port numbers are also included in the hash function. The two different tests 
		gave approximately the same results in both the IPv4 and the IPv6 measurements.</t>
		</section>
		
      </section>
	</section>	

 
    <section anchor="stateful" title="Considerations for Stateful Tests">

	    <t>Stateful technologies like stateful NAT44 or stateful NAT64 are out of the scope of this document. 
		They are covered by <xref target="I-D.ietf-bmwg-benchmarking-stateful"/>.</t>	
	
	</section> 
 
    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>The authors would like to thank Boris Hassanov for his review and comments.</t>
   </section>
 
   <!-- Possibly a 'Contributors' section ... -->

   <section anchor="IANA" title="IANA Considerations">
     <t>This document does not make any request to IANA.</t>
   </section>

   <section anchor="Security" title="Security Considerations">
     <t>The same as in Section 13 of <xref target="RFC8219"/>.</t>
   </section>
 </middle>

 <!--  *****BACK MATTER ***** -->

 <back>
   <!-- References split into informative and normative -->

   <!-- There are 2 ways to insert reference entries from the citation libraries:
    1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
    2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
       (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

    Both are cited textually in the same manner: by using xref elements.
    If you use the PI option, xml2rfc will, by default, try to find included files in the same
    directory as the including file. You can also define the XML_LIBRARY environment variable
    with a value containing a set of directories to search.  These can be either in the local
    filing system or remote ones accessed by http (http://domain/dir/... ).-->

   <references title="Normative References">
    <!--?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"?-->

    &RFC1918;
    &RFC2119;
	&RFC2544;
    &RFC4814;
	&RFC5180;
    &RFC8174;
	&RFC8219;

   </references>

   <references title="Informative References">
     <!-- Here we use entities that we defined at the beginning. -->

    <?rfc include='reference.I-D.ietf-bmwg-benchmarking-stateful'?>

    <reference anchor="RSS2014" 
    target="https://www.kernel.org/doc/Documentation/networking/scaling.txt">
      <front>
        <title>Scaling in the Linux networking stack
        </title>

        <author initials="T." surname="Herbert">
          <organization></organization>
        </author>
        <author initials="W." surname="Brujin">
          <organization></organization>
        </author>

        <date day="" month="" year="2014" />
      </front>
      <seriesInfo name="" value="Linux Kernel Documentation"/>
      <seriesInfo name="" value="available from GitHub"/>
    </reference>

		
    <reference anchor="SIITPERF" 
    target="https://github.com/lencsegabor/siitperf">
      <front>
        <title>Siitperf: An RFC 8219 compliant SIIT and stateful NAT64/NAT44 tester written in C++ using DPDK
        </title>

        <author initials="G." surname="Lencse">
          <organization></organization>
        </author>

        <date day="" month="" year="2019-2023" />
      </front>
      <seriesInfo name="" value="source code"/>
      <seriesInfo name="" value="available from GitHub"/>
    </reference>
	
    <reference anchor="OBSD72CL" 
    target="https://www.openbsd.org/plus72.html">
      <front>
        <title> OpenBSD 7.2 Changelog</title>

        <author initials="T." surname="de Raadt">
          <organization></organization>
        </author>

        <date day="20" month="Oct" year="2022" />
      </front>
      <seriesInfo name="" value="available online"/>
    </reference>	

    <reference anchor="LEN2024"  
    target="https://www.sciencedirect.com/science/article/pii/S0140366424001993">
      <front>
        <title>Making stateless and stateful network performance measurements unbiased</title>

        <author initials="G." surname="Lencse">
          <organization></organization>
        </author>

        <date day="1" month="September" year="2024"/>
      </front>
      <seriesInfo name="" value="Computer Communications, vol. 225, no. 1, pp. 141-155"/>  
      <seriesInfo name="DOI" value="10.1016/j.comcom.2024.05.018"/>	  
    </reference>	

	
	<!-- 	-->
	
   </references>

   <section anchor="change_log" title="Change Log">
    <section title="00">
      <t>Initial version.
      </t>
    </section>
    <section title="01">
      <t>Measurement results added.
      </t>
    </section> 
    <section title="02">
      <t>Minor update (one cited reference was published).
      </t>
    </section>
    <section title="03">
      <t>Test setups with gateways, measurement results, and final recommendations added. Grammar checking was done.
      </t>
    </section>
    <section title="04">
      <t>Addressed the review comments of Boris Hassanov. Recommendation for Testing with 
	  Multiple IP Addresses was moved from Section 6 to Section 2.4.
      </t>
    </section>	
  </section>
  </back>
</rfc>