<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 9">
<meta name=Originator content="Microsoft Word 9">
<link rel=File-List href="./ffpsample_files/filelist.xml">
<title>E100BEX</title>
<style>
<!--
 /* Font Definitions */
@font-face
	{font-family:"MS Sans Serif";
	panose-1:0 0 0 0 0 0 0 0 0 0;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-format:other;
	mso-font-pitch:variable;
	mso-font-signature:3 0 0 0 1 0;}
@font-face
	{font-family:Verdana;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:536871559 0 0 0 415 0;}
 /* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-parent:"";
	margin:0in;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman";
	mso-fareast-font-family:"Times New Roman";
	color:black;}
h2
	{margin-right:0in;
	mso-margin-top-alt:auto;
	mso-margin-bottom-alt:auto;
	margin-left:0in;
	mso-pagination:widow-orphan;
	mso-outline-level:2;
	font-size:18.0pt;
	font-family:"Times New Roman";
	color:black;
	font-weight:bold;}
h3
	{margin-right:0in;
	mso-margin-top-alt:auto;
	mso-margin-bottom-alt:auto;
	margin-left:0in;
	mso-pagination:widow-orphan;
	mso-outline-level:3;
	font-size:13.5pt;
	font-family:"Times New Roman";
	color:black;
	font-weight:bold;}
h4
	{margin-right:0in;
	mso-margin-top-alt:auto;
	mso-margin-bottom-alt:auto;
	margin-left:0in;
	mso-pagination:widow-orphan;
	mso-outline-level:4;
	font-size:12.0pt;
	font-family:"Times New Roman";
	color:black;
	font-weight:bold;}
p.MsoBodyTextIndent, li.MsoBodyTextIndent, div.MsoBodyTextIndent
	{margin-top:0in;
	margin-right:0in;
	margin-bottom:0in;
	margin-left:1.0in;
	margin-bottom:.0001pt;
	text-align:justify;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman";
	mso-fareast-font-family:"Times New Roman";
	color:windowtext;}
p.MsoBodyTextIndent2, li.MsoBodyTextIndent2, div.MsoBodyTextIndent2
	{margin-top:0in;
	margin-right:0in;
	margin-bottom:0in;
	margin-left:2.0in;
	margin-bottom:.0001pt;
	text-align:justify;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman";
	mso-fareast-font-family:"Times New Roman";
	color:windowtext;}
p.MsoBodyTextIndent3, li.MsoBodyTextIndent3, div.MsoBodyTextIndent3
	{margin-top:0in;
	margin-right:0in;
	margin-bottom:0in;
	margin-left:.75in;
	margin-bottom:.0001pt;
	text-align:justify;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman";
	mso-fareast-font-family:"Times New Roman";
	color:black;}
a:link, span.MsoHyperlink
	{color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{color:purple;
	text-decoration:underline;
	text-underline:single;}
p
	{margin-right:0in;
	mso-margin-top-alt:auto;
	mso-margin-bottom-alt:auto;
	margin-left:0in;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman";
	mso-fareast-font-family:"Times New Roman";
	color:black;}
pre
	{margin:0in;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
	font-size:10.0pt;
	font-family:"Courier New";
	mso-fareast-font-family:"Courier New";
	color:black;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.25in 1.0in 1.25in;
	mso-header-margin:.5in;
	mso-footer-margin:.5in;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
 /* List Definitions */
@list l0
	{mso-list-id:213785005;
	mso-list-type:hybrid;
	mso-list-template-ids:-1812310574 67698703 67698713 67698703 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level2
	{mso-level-number-format:alpha-lower;
	mso-level-tab-stop:1.0in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l0:level3
	{mso-level-tab-stop:117.0pt;
	mso-level-number-position:left;
	margin-left:117.0pt;
	text-indent:-.25in;}
ol
	{margin-bottom:0in;}
ul
	{margin-bottom:0in;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1027"/>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1"/>
 </o:shapelayout></xml><![endif]-->
<meta name=Template content="C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\html.dot">
</head>

<body bgcolor=white lang=EN-US link=blue vlink=purple style='tab-interval:.5in'
leftmargin=8>

<div class=Section1>

<h2><span style='font-family:Verdana'>Fast Forward Path (FFP) Sample Code <o:p></o:p></span></h2>

<p class=MsoNormal><span style='font-family:Verdana;color:red'>[This is
preliminary documentation and subject to change.]</span><span style='font-family:
Verdana'> <o:p></o:p></span></p>

<h3><span style='font-family:Verdana'>SUMMARY<o:p></o:p></span></h3>

<p><span style='font-size:10.0pt;font-family:Verdana'>This sample code is not a
complete working driver, but rather sample code to enable adding FFP functionality
to your NDIS miniport driver. For more information on FFP, see the Design Guide
for Network Drivers. Included below is the information you need to include this
functionality and code in your driver.<o:p></o:p></span></p>

<h3><span style='font-family:Verdana'>BUILDING THE SAMPLE<o:p></o:p></span></h3>

<p><span style='font-size:10.0pt;font-family:Verdana'>This sample code must be
included in a working driver as describe below in order to build.<o:p></o:p></span></p>

<h3><span style='font-family:Verdana'>CODE TOUR<o:p></o:p></span></h3>

<h4><span style='font-family:Verdana'>File Manifest<o:p></o:p></span></h4>

<pre><u>Files<span style="mso-spacerun: yes"> </span>Description<o:p></o:p></u></pre><pre>ffpsample.htm<span style="mso-spacerun: yes"> </span>The documentation for this sample (this file)</pre><pre>ffp-def.h<span
style='mso-tab-count:1'> </span>Header file for FFP definitions and structures.<o:p></o:p></pre><pre>ffp-glb.h<span
style='mso-tab-count:1'> </span>Header file with all global variable definitions.<o:p></o:p></pre><pre>ffp-int.c<span
style='mso-tab-count:1'> </span>Routines for initializing, controlling and stopping <o:p></o:p></pre><pre><span
style='mso-tab-count:2'> </span>FFP functionality in the driver. These routines<o:p></o:p></pre><pre><span
style='mso-tab-count:2'> </span>are asynchronous to the packet path execution.<o:p></o:p></pre><pre>ffp-com.c<span
style='mso-tab-count:1'> </span>Routines that are executed on the packet path.<o:p></o:p></pre><pre>ffp-fil.c<span
style='mso-tab-count:1'> </span>Version of ffp-com.c with port filtering ON;<o:p></o:p></pre><pre><span
style='mso-tab-count:2'> </span>these routines are invoked when there are<o:p></o:p></pre><pre><span
style='mso-tab-count:2'> </span>filters based on higher layer information.<o:p></o:p></pre><pre>ffp-nof.c<span
style='mso-tab-count:1'> </span>Version of ffp-com.c with port filtering OFF;<o:p></o:p></pre><pre><span
style='mso-tab-count:2'> </span>these routines are invoked when there are<o:p></o:p></pre><pre><span
style='mso-tab-count:2'> </span>no filters based on higher layer information.<o:p></o:p></pre><pre><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></pre>

<h4><span style='font-family:Verdana'>Implementation Instructions<o:p></o:p></span></h4>

<p><span style='font-size:10.0pt;font-family:Verdana'>Follow these steps to
incorporate this functionality into your driver.<o:p></o:p></span></p>

<ol style='margin-top:0in' start=1 type=1>
 <li class=MsoNormal style='text-align:justify;mso-list:l0 level1 lfo3;
     tab-stops:list .5in'><b>Implement the following Build Changes to add FFP
     functionality to your driver. These changes are to be made to the SOURCES
     file.<o:p></o:p></b></li>
</ol>

<p class=MsoNormal style='margin-left:.25in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<ol style='margin-top:0in' start=1 type=1>
 <ol style='margin-top:0in' start=1 type=a>
  <li class=MsoNormal style='text-align:justify;mso-list:l0 level2 lfo3;
      tab-stops:list 1.0in'>Add these files </li>
 </ol>
</ol>

<p class=MsoNormal style='margin-left:.75in;text-align:justify;text-indent:
.5in'>ffp-int.c</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.25in'>ffp-fil.c</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.25in'>ffp-nof.c , </p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.25in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.25in'>to list of<span style="mso-spacerun: yes"> </span>SOURCES.</p>

<p class=MsoNormal style='margin-left:.75in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<ol style='margin-top:0in' start=1 type=1>
 <ol style='margin-top:0in' start=2 type=a>
  <li class=MsoNormal style='text-align:justify;mso-list:l0 level2 lfo3;
      tab-stops:list 1.0in'>Add to Sources File:</li>
 </ol>
</ol>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'><span
style="mso-spacerun: yes"> </span>C_DEFINES=$(C_DEFINES) DFFP_SUPPORT=1</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<ol style='margin-top:0in' start=2 type=1>
 <li class=MsoNormal style='text-align:justify;mso-list:l0 level1 lfo3;
     tab-stops:list .5in'><b>Import the FFP definitions into the driver.<o:p></o:p></b></li>
</ol>

<p class=MsoNormal style='margin-left:.25in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<ol style='margin-top:0in' start=2 type=1>
 <ol style='margin-top:0in' start=1 type=a>
  <li class=MsoNormal style='text-align:justify;mso-list:l0 level2 lfo3;
      tab-stops:list 1.0in'>Add this to Precompiled Header or Main Header File</li>
 </ol>
</ol>

<p class=MsoNormal style='text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'>#if
FFP_SUPPORT</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify'>#include
ffp-def.h</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'>#endif</p>

<span style='font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:
"Times New Roman";color:black;mso-ansi-language:EN-US;mso-fareast-language:
EN-US;mso-bidi-language:AR-SA'><br clear=all style='mso-special-character:line-break;
page-break-before:always'>
</span>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<ol style='margin-top:0in' start=3 type=1>
 <li class=MsoNormal style='text-align:justify;mso-list:l0 level1 lfo3;
     tab-stops:list .5in'><b>Modify existing definitions in your driver.<o:p></o:p></b></li>
</ol>

<p class=MsoNormal style='margin-left:.25in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<ol style='margin-top:0in' start=3 type=1>
 <ol style='margin-top:0in' start=1 type=a>
  <li class=MsoNormal style='text-align:justify;mso-list:l0 level2 lfo3;
      tab-stops:list 1.0in'>Add a structure of type FFPAdapterStats to your
      interface/adapter structure which corresponds to the miniport adapter.
      This structure is used to maintain per-adapter statistics that are updated
      when packets are fast forwarder to or from this adapter.</li>
 </ol>
</ol>

<p class=MsoNormal style='margin-left:.75in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify'>typedef struct
_MINIPORT_ADAPTER</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify'>{</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify'></p>

<p class=MsoNormal style='margin-left:.75in;text-align:justify;text-indent:
.25in'>#if FFP_SUPPORT</p>

<p class=MsoNormal style='margin-left:.75in;text-align:justify;text-indent:
.25in'><span style="mso-spacerun: yes"> </span>FFPAdapterStats<span
style="mso-spacerun: yes"> </span>FFPStats;<span style="mso-spacerun:
yes"> </span>// FFP Stats on this adapter</p>

<p class=MsoNormal style='margin-left:.75in;text-align:justify;text-indent:
.25in'>#endif</p>

<p class=MsoNormal style='margin-left:.75in;text-align:justify;text-indent:
.25in'></p>

<p class=MsoNormal style='margin-left:.75in;text-align:justify;text-indent:
.25in'>}</p>

<p class=MsoNormal style='margin-left:.75in;text-align:justify'><span
style='mso-tab-count:1'> </span>MINIPORT_ADAPTER;</p>

<p class=MsoNormal style='margin-left:.75in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<ol style='margin-top:0in' start=3 type=1>
 <ol style='margin-top:0in' start=2 type=a>
  <li class=MsoNormal style='text-align:justify;mso-list:l0 level2 lfo3;
      tab-stops:list 1.0in'>Implement the following MACROS that work on the
      adapter,</li>
 </ol>
</ol>

<p class=MsoNormal style='margin-left:.75in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><b>This example
code here is for illustration purposed only, and it might be different for your
miniport driver.<o:p></o:p></b></p>

<p class=MsoNormal style='text-align:justify'><b><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></b></p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'>#if
FFP_SUPPORT</p>

<p class=MsoNormal style='text-align:justify;text-indent:.5in'><span
style='mso-tab-count:2'> </span>// This macro is used to
access the FFP statistics in the adapter structure.</p>

<p class=MsoNormal style='text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>#define FFP_ADAPTER_STATS(_MiniportAdapter_) </p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
.5in'>(&amp;(((MINIPORT_ADAPTER *)_MiniportAdapter_)-&gt;FFPStats))</p>

<p class=MsoNormal style='text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='text-align:justify'><span style='mso-tab-count:3'> </span>//</p>

<p class=MsoNormal style='text-align:justify'><span style='mso-tab-count:3'> </span>//
The next 3 macros are used for interating over adapters on the global list</p>

<p class=MsoNormal style='text-align:justify'><span style='mso-tab-count:3'> </span>//
as in</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>//<span style="mso-spacerun: yes"> </span>for (vpCurrAdapter =
GET_FIRST_ADAPTER();</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>//<span style="mso-spacerun: yes"> </span>ARE_ADAPTERS_LEFT(vpCurrAdapter);</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>//<span style="mso-spacerun: yes">
</span>vpCurrAdapter = GET_NEXT_ADAPTER(vpCurrAdapter))</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>//<span style="mso-spacerun: yes"> </span>{</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>//<span style="mso-spacerun: yes"> </span>Stats =
FFP_ADAPTER_STATS(vpCurrAdapter);</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>//<span style='mso-tab-count:1'> </span></p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>//<span style="mso-spacerun: yes"> </span>}</p>

<p class=MsoNormal style='text-align:justify'><span style='mso-tab-count:3'> </span>//</p>

<p class=MsoNormal style='text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>#define GET_FIRST_ADAPTER()<span style="mso-spacerun: yes"> </span></p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'><span style="mso-spacerun: yes"> </span>(Globals.AdapterList)</p>

<p class=MsoNormal style='text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>#define ARE_ADAPTERS_LEFT(_CurrAdapter_)<span style="mso-spacerun:
yes"> </span></p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
.5in'>(((MINIPORT_ADAPTER *)_CurrAdapter_) != NULL)</p>

<p class=MsoNormal style='text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>#define GET_NEXT_ADAPTER(_CurrAdapter_)<span style="mso-spacerun:
yes"> </span></p>

<p class=MsoNormal style='margin-left:2.0in;text-align:justify'>(((MINIPORT_ADAPTER
*)_CurrAdapter_)-&gt;Next)</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'>#endif</p>

<p class=MsoNormal style='margin-left:.75in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoBodyTextIndent3>These macros are used by FFP to compute cumulative
statistics across all adapters.</p>

<span style='font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:
"Times New Roman";color:black;mso-ansi-language:EN-US;mso-fareast-language:
EN-US;mso-bidi-language:AR-SA'><br clear=all style='mso-special-character:line-break;
page-break-before:always'>
</span>

<p class=MsoNormal style='text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<ol style='margin-top:0in' start=4 type=1>
 <li class=MsoNormal style='text-align:justify;mso-list:l0 level1 lfo3;
     tab-stops:list .5in'><b>Initialize and Stop FFP functionality<o:p></o:p></b></li>
</ol>

<p class=MsoNormal style='margin-left:.75in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<ol style='margin-top:0in' start=4 type=1>
 <ol style='margin-top:0in' start=1 type=a>
  <li class=MsoNormal style='text-align:justify;mso-list:l0 level2 lfo3;
      tab-stops:list 1.0in'>Add this to DriverEntry:</li>
 </ol>
</ol>

<p class=MsoNormal style='text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'>#if
FFP_SUPPORT</p>

<p class=MsoNormal style='margin-left:.25in;text-align:justify;text-indent:
.5in'><span style="mso-spacerun: yes"> </span><span style='mso-tab-count:
1'> </span>/* Initialize FFP functionality in the driver */</p>

<p class=MsoNormal style='margin-left:.25in;text-align:justify;text-indent:
.5in'><span style="mso-spacerun: yes"> </span><span style='mso-tab-count:
1'> </span>if (FFPStartup() != NDIS_STATUS_SUCCESS)</p>

<p class=MsoNormal style='margin-left:.25in;text-align:justify;text-indent:
.5in'><span style="mso-spacerun: yes"> </span><span style='mso-tab-count:
1'> </span>{</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'><span
style="mso-spacerun: yes"> </span>return STATUS_UNSUCCESSFUL;</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
style="mso-spacerun: yes"> </span><span style="mso-spacerun:
yes"></span><span style='mso-tab-count:1'> </span>}</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
style="mso-spacerun: yes"> </span>#endif // FFP_SUPPORT</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<ol style='margin-top:0in' start=4 type=1>
 <ol style='margin-top:0in' start=2 type=a>
  <li class=MsoNormal style='text-align:justify;mso-list:l0 level2 lfo3;
      tab-stops:list 1.0in'>Add this to DriverUnload</li>
 </ol>
</ol>

<p class=MsoNormal style='text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'>#if
FFP_SUPPORT</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'>/*
Free up resources allocated for FFP functionality */</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'>FFPShutdown();</p>

<p class=MsoNormal style='margin-left:.25in;text-align:justify;text-indent:
.5in'>#endif // FFP_SUPPORT</p>

<p class=MsoNormal style='text-align:justify;text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:.75in;text-align:justify'>You want to call
this in case an error occurred in DriverEntry after successfully initializing
FFP functionality using FFPStartup().</p>

<span style='font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:
"Times New Roman";color:black;mso-ansi-language:EN-US;mso-fareast-language:
EN-US;mso-bidi-language:AR-SA'><br clear=all style='mso-special-character:line-break;
page-break-before:always'>
</span>

<p class=MsoNormal style='margin-left:.75in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<ol style='margin-top:0in' start=5 type=1>
 <li class=MsoNormal style='text-align:justify;mso-list:l0 level1 lfo3;
     tab-stops:list .5in'><b>Handle the FFP Set OIDs<o:p></o:p></b></li>
</ol>

<p class=MsoNormal style='margin-left:.75in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<ol style='margin-top:0in' start=5 type=1>
 <ol style='margin-top:0in' start=1 type=a>
  <li class=MsoNormal style='text-align:justify;mso-list:l0 level2 lfo3;
      tab-stops:list 1.0in'>Add to the drivers NDIS40 SetInformationHandler at
      the beginning of the function,</li>
 </ol>
</ol>

<p class=MsoNormal style='text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'>#if
FFP_SUPPORT</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>switch (Oid)</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>{</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>case OID_FFP_SUPPORT:</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>case OID_FFP_FLUSH:</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>case OID_FFP_CONTROL:</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>case OID_FFP_PARAMS:</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>case OID_FFP_ADAPTER_STATS:</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>case OID_FFP_DRIVER_STATS:</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>case OID_FFP_DATA:</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>return FFPHandleOidSetRequest(</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
style="mso-spacerun: yes"> </span><span style='mso-tab-count:1'> </span><span
style="mso-spacerun: yes"></span><span style="mso-spacerun: yes"></span><span
style='mso-tab-count:1'> </span>MiniportAdapter,</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>Oid,</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>InformationBuffer,</p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify'>InformationBufferLength,</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>BytesRead,</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>BytesNeeded);</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'>}</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
style="mso-spacerun: yes"> </span></p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'>#endif //
FFP_SUPPORT</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'>This will enable
your driver to answer FFP Set OID requests that are sent to your driver.</p>

<p class=MsoNormal style='text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<ol style='margin-top:0in' start=6 type=1>
 <li class=MsoNormal style='text-align:justify;mso-list:l0 level1 lfo3;
     tab-stops:list .5in'><b>Handle the FFP Query OIDs<o:p></o:p></b></li>
</ol>

<p class=MsoNormal style='margin-left:.75in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<ol style='margin-top:0in' start=6 type=1>
 <ol style='margin-top:0in' start=1 type=a>
  <li class=MsoNormal style='text-align:justify;mso-list:l0 level2 lfo3;
      tab-stops:list 1.0in'>Add to the drivers NDIS40 QueryInformationHandler
      at the beginning of the function,</li>
 </ol>
</ol>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'>#if
FFP_SUPPORT</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>switch (Oid)</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>{</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>case OID_FFP_SUPPORT:</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>case OID_FFP_FLUSH:</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>case OID_FFP_CONTROL:</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>case OID_FFP_PARAMS:</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>case OID_FFP_ADAPTER_STATS:</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>case OID_FFP_DRIVER_STATS:</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>case OID_FFP_DATA:</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.25in'><span
style="mso-spacerun: yes"> </span>return FFPHandleOidQueryRequest(</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
style="mso-spacerun: yes"> </span><span style='mso-tab-count:1'> </span><span
style="mso-spacerun: yes"></span>MiniportAdapter,</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'><span
style="mso-spacerun: yes"> </span>Oid,</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
style="mso-spacerun: yes"> </span><span style='mso-tab-count:1'> </span><span
style="mso-spacerun: yes"></span>InformationBuffer,</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
style="mso-spacerun: yes"> </span><span style='mso-tab-count:1'> </span><span
style="mso-spacerun: yes"></span>InformationBufferLength,</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
style="mso-spacerun: yes"> </span><span style='mso-tab-count:1'> </span><span
style="mso-spacerun: yes"></span>BytesRead,</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
style="mso-spacerun: yes"> </span><span style='mso-tab-count:1'> </span><span
style="mso-spacerun: yes"></span>BytesNeeded);</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
style="mso-spacerun: yes"> </span>}</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><span
style="mso-spacerun: yes"> </span></p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'>#endif //
FFP_SUPPORT</p>

<p class=MsoNormal style='text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'>This will enable
your driver to answer FFP Query OID requests that are sent to your driver.</p>

<span style='font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:
"Times New Roman";color:black;mso-ansi-language:EN-US;mso-fareast-language:
EN-US;mso-bidi-language:AR-SA'><br clear=all style='page-break-before:always'>

<ol style='margin-top:0in' start=7 type=1>
 <li class=MsoNormal style='text-align:justify;mso-list:l0 level1 lfo3;
     tab-stops:list .5in'><b>Gather Information from the send packet path.<o:p></o:p></b></li>
</ol>

</span>

<p class=MsoNormal style='margin-left:.25in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<ol style='margin-top:0in' start=7 type=1>
 <ol style='margin-top:0in' start=1 type=a>
  <li class=MsoNormal style='text-align:justify;mso-list:l0 level2 lfo3;
      tab-stops:list 1.0in'>Add to your miniport send handler at the beginning
      of the function,</li>
 </ol>
</ol>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:.25in;text-align:justify;text-indent:
.5in'>#if FFP_SUPPORT</p>

<p class=MsoNormal style='text-align:justify;text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:.25in;text-align:justify;text-indent:
.5in'>FFPOnPacketSendPath(</p>

<p class=MsoNormal style='margin-left:.25in;text-align:justify;text-indent:
.5in'><span style="mso-spacerun: yes"> </span>MiniportAdapter,</p>

<p class=MsoNormal style='margin-left:.25in;text-align:justify;text-indent:
.5in'><span style="mso-spacerun: yes"> </span>Packet,</p>

<p class=MsoNormal style='margin-left:.25in;text-align:justify;text-indent:
.5in'><span style="mso-spacerun: yes"> </span>);</p>

<p class=MsoNormal style='text-align:justify;text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:.25in;text-align:justify;text-indent:
.5in'>#endif // FFP_SUPPORT</p>

<p class=MsoNormal style='margin-left:.25in;text-align:justify;text-indent:
.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:.75in;text-align:justify'>This will enable
the collection of information from the packet as it is being sent. This
information will then be used to prime the FFP forwarding cache.</p>

<p class=MsoNormal style='margin-left:.25in;text-align:justify;text-indent:
.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<ol style='margin-top:0in' start=8 type=1>
 <li class=MsoNormal style='text-align:justify;mso-list:l0 level1 lfo3;
     tab-stops:list .5in'><b>Fast forward the received packet if possible on
     the receive path.<o:p></o:p></b></li>
</ol>

<p class=MsoNormal style='margin-left:.25in;text-align:justify'><b><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></b></p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify'>Call the
following function (actually implemented as a MACRO) with the appropriate
parameters,</p>

<p class=MsoNormal style='margin-left:.75in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify'>ULONG<span
style='mso-tab-count:1'> </span>FFPProcessReceivedPacket (</p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify'><span
style="mso-spacerun: yes"> </span>IN<span style="mso-spacerun: yes">
</span>UNALIGNED EnetHeader<span style="mso-spacerun: yes">
</span>*EthernetHeader, </p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify'><span
style="mso-spacerun: yes"> </span>IN<span style="mso-spacerun: yes">
</span>UNALIGNED FFPIPHeader<span style="mso-spacerun: yes">
</span>*IpHeader, </p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify'><span
style="mso-spacerun: yes"> </span>IN<span style="mso-spacerun: yes">
</span>HANDLE<span style="mso-spacerun:
yes"> </span><span style="mso-spacerun:
yes"></span>IncomingAdapter, </p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify'><span
style="mso-spacerun: yes"> </span>OUT HANDLE<span style="mso-spacerun:
yes"> </span>*OutgoingAdapter</p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify'><span
style="mso-spacerun: yes"> </span>);</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify'>See help for
this function in the description of </p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>FFPWithFiltering_FFPProcessReceivedPacket in ffp-com.c</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='text-align:justify'><span style='mso-tab-count:2'> </span>If
return value is <span style='mso-tab-count:1'> </span></p>

<p class=MsoNormal style='text-align:justify'><span style='mso-tab-count:3'> </span>FFP_INDICATE_PACKET</p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
.5in'>Normal behavior. Just do what you were doing before without FFP.</p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>FFP_DISCARD_PACKET, <span style='mso-tab-count:1'> </span></p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
.5in'>Drop the packet and do not indicate or forward,</p>

<p class=MsoNormal style='text-align:justify'><span style='mso-tab-count:4'> </span></p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>FFP_FORWARD_PACKET,</p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
.5in'>Do<span style="mso-spacerun: yes"> </span>not indicate the packet, but
forward to the OutgoingAdapter.</p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoBodyTextIndent2>This can be done by taking this packet and directly
putting it in the OutgoingAdapters send queue for transmission. This way,
the higher layers of the network stack are bypassed for this packet completely.</p>

<p class=MsoNormal style='text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='text-align:justify'><span style='mso-tab-count:2'> </span>In
all the above cases, update FFPAdapterStats structure embedded in the adapter.</p>

<p class=MsoNormal style='text-align:justify'><span style='mso-tab-count:2'> </span></p>

<p class=MsoNormal style='text-align:justify'><span style='mso-tab-count:1'> </span>See
the following code fragment:</p>

<span style='font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:
"Times New Roman";color:black;mso-ansi-language:EN-US;mso-fareast-language:
EN-US;mso-bidi-language:AR-SA'><br clear=all style='mso-special-character:line-break;
page-break-before:always'>
</span>

<p class=MsoNormal style='text-align:justify;text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='text-align:justify;text-indent:.5in'><span
style="mso-spacerun: yes"> </span>if (FFPEnabled)</p>

<p class=MsoNormal style='text-align:justify;text-indent:.5in'><span
style="mso-spacerun: yes"> </span>{</p>

<p class=MsoNormal style='text-align:justify;text-indent:.5in'><span
style="mso-spacerun: yes"> </span>retcode = FFPProcessReceivedPacket</p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
.5in'>((UNALIGNED EnetHeader *)Packet, </p>

<p class=MsoNormal style='text-align:justify;text-indent:.5in'><span
style="mso-spacerun: yes"> </span><span style='mso-tab-count:2'> </span><span
style="mso-spacerun: yes"></span>(UNALIGNED FFPIPHeader
*)(((PUCHAR) Packet) + HDR_SIZE),</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'><span
style="mso-spacerun: yes"> </span><span
style="mso-spacerun: yes"></span>(HANDLE)IncomingAdapter, </p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
.5in'><span style="mso-spacerun: yes"> </span>(HANDLE *)&amp;OutgoingAdapter);</p>

<p class=MsoNormal style='text-align:justify'><span style='mso-tab-count:2'> </span>switch
(retcode)</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'>{</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'><span
style="mso-spacerun: yes"> </span>case FFP_DISCARD_PACKET:</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'><span
style="mso-spacerun: yes"> </span><span style='mso-tab-count:1'> </span>{</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'><span
style='mso-tab-count:2'> </span>// Discard the packet
and update statictics</p>

<p class=MsoNormal style='text-align:justify;text-indent:.5in'><span
style='mso-tab-count:3'> </span></p>

<p class=MsoNormal style='text-align:justify'><span style='mso-tab-count:4'> </span>return
;</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'><span
style="mso-spacerun: yes"> </span><span style='mso-tab-count:1'> </span>}</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'><span
style="mso-spacerun: yes"> </span>case FFP_FORWARD_PACKET:</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>{</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'><span style='mso-tab-count:1'> </span>// Forward the packet
and update statistics</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'><span style='mso-tab-count:1'> </span></p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'><span style='mso-tab-count:1'> </span>return ;</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>}</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
style="mso-spacerun: yes"> </span>case FFP_INDICATE_PACKET:</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
style='mso-tab-count:1'> </span>{</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify'><span
style='mso-tab-count:2'> </span>// Just update
statictics, fall out of<span style="mso-spacerun: yes"> </span>switch</p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
.5in'>// (Old Normal behavior  without FFP )</p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
.5in'></p>

<p class=MsoNormal style='margin-left:1.5in;text-align:justify;text-indent:
.5in'>break;</p>

<p class=MsoNormal style='margin-left:1.0in;text-align:justify;text-indent:
.5in'>}</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'>}</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'>//
Normal indicate path  taken only in case of FFP_INDICATE_PACKET</p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'></p>

<p class=MsoNormal style='margin-left:.5in;text-align:justify;text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<ol style='margin-top:0in' start=9 type=1>
 <li class=MsoNormal style='text-align:justify;mso-list:l0 level1 lfo3;
     tab-stops:list .5in'><b>Reclaim the fast forwarded packet once transmitted</b></li>
</ol>

<p class=MsoNormal style='text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoBodyTextIndent style='margin-left:.5in'>In the FFP_FORWARD_PACKET
case above, we mentioned that you can take the packet from the receive queue
and put in the send queue of the outgoing adapter. Once the packet is
transmitted out, it should be reinitialized and returned to the incoming
adapters free pool so that it can reused.</p>

<p class=MsoNormal style='text-align:justify'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>

<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
margin-left:.25in'><span style='font-size:10.0pt;font-family:Verdana'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

<p align=center style='text-align:center'><span style='font-size:10.0pt;
font-family:Verdana'><a href="#top">Top of page</a> <o:p></o:p></span></p>

<table border=0 cellspacing=0 cellpadding=0 width=624 style='width:6.5in;
 mso-cellspacing:0in;mso-padding-alt:0in 0in 0in 0in'>
 <tr style='height:1.5pt'>
  <td style='background:aqua;padding:.75pt .75pt .75pt .75pt;height:1.5pt'>
  <p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
  </td>
 </tr>
</table>

<p><span style='font-size:7.5pt;font-family:"MS Sans Serif"'> 1999 Microsoft
Corporation</span><span style='font-size:10.0pt;font-family:Verdana'> <o:p></o:p></span></p>

</div>

</body>

</html>
