<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:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:odc="urn:schemas-microsoft-com:office:odc" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rtc="http://microsoft.com/officenet/conferencing" xmlns:D="DAV:" xmlns:Repl="http://schemas.microsoft.com/repl/" xmlns:mt="http://schemas.microsoft.com/sharepoint/soap/meetings/" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ppda="http://www.passport.com/NameSpace.xsd" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcs="http://schemas.microsoft.com/data/udc/soap" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:udcp2p="http://schemas.microsoft.com/data/udc/parttopart" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:dsss="http://schemas.microsoft.com/office/2006/digsig-setup" xmlns:dssi="http://schemas.microsoft.com/office/2006/digsig" xmlns:mdssi="http://schemas.openxmlformats.org/package/2006/digital-signature" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:spwp="http://microsoft.com/sharepoint/webpartpages" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:pptsl="http://schemas.microsoft.com/sharepoint/soap/SlideLibrary/" xmlns:spsl="http://microsoft.com/webservices/SharePointPortalServer/PublishedLinksService" xmlns:Z="urn:schemas-microsoft-com:" xmlns:st="" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal>IPv6 initial commit, DHCP flow is not supported yet<o:p></o:p></p>

<p class=MsoNormal>Signed-off by: Alexander Naslednikov (xalex at
mellanox.co.il)<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>Index: inc/kernel/ip_packet.h<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- inc/kernel/ip_packet.h           (revision 2982)<o:p></o:p></p>

<p class=MsoNormal>+++ inc/kernel/ip_packet.h        (working copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -200,6 +200,7 @@<o:p></o:p></p>

<p class=MsoNormal> #define IP_PROT_UDP                                 17<o:p></o:p></p>

<p class=MsoNormal> #define IP_PROT_IGMP                              2<o:p></o:p></p>

<p class=MsoNormal> #define IP_PROT_ICMP                               1<o:p></o:p></p>

<p class=MsoNormal>+#define IP_PROT_ICMPV6                        58<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> #include <complib/cl_packon.h><o:p></o:p></p>

<p class=MsoNormal>@@ -263,7 +264,73 @@<o:p></o:p></p>

<p class=MsoNormal> *********/<o:p></o:p></p>

<p class=MsoNormal> #include <complib/cl_packoff.h><o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>+#include <complib/cl_packon.h><o:p></o:p></p>

<p class=MsoNormal>+/****s* IB Network Drivers/ipv6_hdr_t<o:p></o:p></p>

<p class=MsoNormal>+* NAME<o:p></o:p></p>

<p class=MsoNormal>+*           ipv6_hdr_t<o:p></o:p></p>

<p class=MsoNormal>+*<o:p></o:p></p>

<p class=MsoNormal>+* DESCRIPTION<o:p></o:p></p>

<p class=MsoNormal>+*           Defines the IPV6 header for IPV6 packets.<o:p></o:p></p>

<p class=MsoNormal>+*<o:p></o:p></p>

<p class=MsoNormal>+* SYNOPSIS<o:p></o:p></p>

<p class=MsoNormal>+*/<o:p></o:p></p>

<p class=MsoNormal>+typedef struct _ipv6_hdr<o:p></o:p></p>

<p class=MsoNormal>+{<o:p></o:p></p>

<p class=MsoNormal>+             uint32_t               ver_tc_fl;<o:p></o:p></p>

<p class=MsoNormal>+             uint16_t               payload_length;<o:p></o:p></p>

<p class=MsoNormal>+             uint8_t                 next_header;<o:p></o:p></p>

<p class=MsoNormal>+             uint8_t                 hop_limit;<o:p></o:p></p>

<p class=MsoNormal>+             uint8_t                 src_addr[16];<o:p></o:p></p>

<p class=MsoNormal>+             uint8_t                 dest_addr[16];<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>+}            PACK_SUFFIX ipv6_hdr_t;<o:p></o:p></p>

<p class=MsoNormal>+/*<o:p></o:p></p>

<p class=MsoNormal>+* FIELDS<o:p></o:p></p>

<p class=MsoNormal>+*           ver_tc_fl<o:p></o:p></p>

<p class=MsoNormal>+*                           This field contains of 3
subfields:<o:p></o:p></p>

<p class=MsoNormal>+*                           1.Version (4 bits) <o:p></o:p></p>

<p class=MsoNormal>+*                           The constant 6 (bit sequence
0110).<o:p></o:p></p>

<p class=MsoNormal>+*                           2.Traffic Class (8 bits) <o:p></o:p></p>

<p class=MsoNormal>+*                           The bits of this field hold two
values. The 6 most-significant bits are used <o:p></o:p></p>

<p class=MsoNormal>+*                           for DSCP, which is used to
classify packets. The remaining two bits <o:p></o:p></p>

<p class=MsoNormal>+*                           are used for ECN; priority
values subdivide into ranges: traffic where <o:p></o:p></p>

<p class=MsoNormal>+*                           the source provides congestion
control and non-congestion control traffic.<o:p></o:p></p>

<p class=MsoNormal>+*                           3.Flow Label (20 bits) <o:p></o:p></p>

<p class=MsoNormal>+*                           Originally created for giving
real-time applications special service.<o:p></o:p></p>

<p class=MsoNormal>+*                           Flow Label specifications and
minimum requirements are described, <o:p></o:p></p>

<p class=MsoNormal>+*                           and first uses of this field
are emerging.<o:p></o:p></p>

<p class=MsoNormal>+*<o:p></o:p></p>

<p class=MsoNormal>+*<o:p></o:p></p>

<p class=MsoNormal>+*           payload_length;<o:p></o:p></p>

<p class=MsoNormal>+*                           The size of the payload in
octets, including any extension headers. <o:p></o:p></p>

<p class=MsoNormal>+*                           The length is set to zero when
a Hop-by-Hop extension header carries <o:p></o:p></p>

<p class=MsoNormal>+*                           a Jumbo Payload option.<o:p></o:p></p>

<p class=MsoNormal>+*<o:p></o:p></p>

<p class=MsoNormal>+*           next_header<o:p></o:p></p>

<p class=MsoNormal>+*                           Specifies the type of the next
header. This field usually specifies the<o:p></o:p></p>

<p class=MsoNormal>+*                           transport layer protocol used
by a packet's payload. When extension headers<o:p></o:p></p>

<p class=MsoNormal>+*                           are present in the packet this
field indicates which extension header follows. <o:p></o:p></p>

<p class=MsoNormal>+*                           The values are shared with those
used for the IPv4 protocol field, <o:p></o:p></p>

<p class=MsoNormal>+*                           as both fields have the same
function <o:p></o:p></p>

<p class=MsoNormal>+*<o:p></o:p></p>

<p class=MsoNormal>+*           hop_limit<o:p></o:p></p>

<p class=MsoNormal>+*                           Replaces the time to live field
of IPv4. This value is decremented by <o:p></o:p></p>

<p class=MsoNormal>+*                           one at each intermediate node
the packet visits. When the counter reaches <o:p></o:p></p>

<p class=MsoNormal>+*                           0 the packet is discarded<o:p></o:p></p>

<p class=MsoNormal>+*<o:p></o:p></p>

<p class=MsoNormal>+*           src_addr<o:p></o:p></p>

<p class=MsoNormal>+*                           The IPv6 address of the sending
node.<o:p></o:p></p>

<p class=MsoNormal>+*<o:p></o:p></p>

<p class=MsoNormal>+*           dest_addr<o:p></o:p></p>

<p class=MsoNormal>+*                           The IPv6 address of the
destination node(s).<o:p></o:p></p>

<p class=MsoNormal>+*<o:p></o:p></p>

<p class=MsoNormal>+*<o:p></o:p></p>

<p class=MsoNormal>+* SEE ALSO<o:p></o:p></p>

<p class=MsoNormal>+*           IB Network Drivers, eth_hdr_t, arp_pkt_t,
tcp_hdr_t, udp_hdr_t<o:p></o:p></p>

<p class=MsoNormal>+*********/<o:p></o:p></p>

<p class=MsoNormal>+#include <complib/cl_packoff.h><o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal> #include <complib/cl_packon.h><o:p></o:p></p>

<p class=MsoNormal> /****s* IB Network Drivers/tcp_hdr_t<o:p></o:p></p>

<p class=MsoNormal> * NAME<o:p></o:p></p>

<p class=MsoNormal>@@ -432,8 +499,11 @@<o:p></o:p></p>

<p class=MsoNormal> *********/<o:p></o:p></p>

<p class=MsoNormal> #include <complib/cl_packoff.h><o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-#define DHCP_PORT_SERVER                  CL_HTON16(67)<o:p></o:p></p>

<p class=MsoNormal>-#define DHCP_PORT_CLIENT                    CL_HTON16(68)<o:p></o:p></p>

<p class=MsoNormal>+#define DHCP_PORT_SERVER                                                 CL_HTON16(67)<o:p></o:p></p>

<p class=MsoNormal>+#define DHCP_PORT_CLIENT                                                   CL_HTON16(68)<o:p></o:p></p>

<p class=MsoNormal>+#define DHCP_IPV6_PORT_SERVER_OR_AGENT            CL_HTON16(547)<o:p></o:p></p>

<p class=MsoNormal>+#define DHCP_IPV6_PORT_CLIENT                                       CL_HTON16(546)<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal> #define DHCP_PORT_PROXY_SERVER   CL_HTON16(4011)<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> #define DHCP_REQUEST                                             1<o:p></o:p></p>

<p class=MsoNormal>@@ -534,7 +604,11 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> typedef struct _ip_pkt<o:p></o:p></p>

<p class=MsoNormal> {<o:p></o:p></p>

<p class=MsoNormal>-              ip_hdr_t                              hdr;<o:p></o:p></p>

<p class=MsoNormal>+             union<o:p></o:p></p>

<p class=MsoNormal>+             {<o:p></o:p></p>

<p class=MsoNormal>+                             ip_hdr_t                              hdr;<o:p></o:p></p>

<p class=MsoNormal>+                             ipv6_hdr_t                          hdr_ipv6;<o:p></o:p></p>

<p class=MsoNormal>+             } PACK_SUFFIX ;<o:p></o:p></p>

<p class=MsoNormal>                union _ip_payload<o:p></o:p></p>

<p class=MsoNormal>                {<o:p></o:p></p>

<p class=MsoNormal>                                tcp_hdr_t            tcp;<o:p></o:p></p>

<p class=MsoNormal>Index: ulp/ipoib_NDIS6_CM/kernel/ipoib_debug.h<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- ulp/ipoib_NDIS6_CM/kernel/ipoib_debug.h                (revision
2982)<o:p></o:p></p>

<p class=MsoNormal>+++ ulp/ipoib_NDIS6_CM/kernel/ipoib_debug.h             (working
copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -205,6 +205,7 @@<o:p></o:p></p>

<p class=MsoNormal>                                                BuildSendDesc,<o:p></o:p></p>

<p class=MsoNormal>                                                                SendMgrFilter,<o:p></o:p></p>

<p class=MsoNormal>                                                                                FilterIp,<o:p></o:p></p>

<p class=MsoNormal>+                                                                             FilterIpV6,<o:p></o:p></p>

<p class=MsoNormal>                                                                                                QueryIp,<o:p></o:p></p>

<p class=MsoNormal>                                                                                                SendTcp,<o:p></o:p></p>

<p class=MsoNormal>                                                                                                FilterUdp,<o:p></o:p></p>

<p class=MsoNormal>Index: ulp/ipoib_NDIS6_CM/kernel/ipoib_driver.cpp<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- ulp/ipoib_NDIS6_CM/kernel/ipoib_driver.cpp             (revision
2982)<o:p></o:p></p>

<p class=MsoNormal>+++ ulp/ipoib_NDIS6_CM/kernel/ipoib_driver.cpp          (working
copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -3303,7 +3303,6 @@<o:p></o:p></p>

<p class=MsoNormal>                                                shutter_shut(
&p_adapter->recv_shutter );<o:p></o:p></p>

<p class=MsoNormal>                                                // Notify
that shutter was already shut<o:p></o:p></p>

<p class=MsoNormal>                                                p_adapter->ipoib_state
|= IPOIB_RESET_OR_DOWN;<o:p></o:p></p>

<p class=MsoNormal>-                                                              ASSERT(
p_adapter->ipoib_state == IPOIB_RUNNING );                <o:p></o:p></p>

<p class=MsoNormal>                                                IPOIB_PRINT(
TRACE_LEVEL_INFORMATION,  IPOIB_DBG_SHUTTER,<o:p></o:p></p>

<p class=MsoNormal>                                                                ("ipoib_state
was IPOIB_RUNNING and IPOIB_RESET_OR_DOWN flag was set\n") );<o:p></o:p></p>

<p class=MsoNormal>                                }<o:p></o:p></p>

<p class=MsoNormal>Index: ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp                (revision
2982)<o:p></o:p></p>

<p class=MsoNormal>+++ ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp             (working
copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -349,9 +349,10 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> static NDIS_STATUS<o:p></o:p></p>

<p class=MsoNormal> __send_mgr_filter_udp(<o:p></o:p></p>

<p class=MsoNormal>-              IN                           const     ip_hdr_t*
const                                                                p_ip_hdr,<o:p></o:p></p>

<p class=MsoNormal>+             IN                           const     void*
const                                                                         p_ip_hdr,<o:p></o:p></p>

<p class=MsoNormal>                IN                                                           MDL*                                                                                    p_mdl,<o:p></o:p></p>

<p class=MsoNormal>                IN                                                           size_t                                                                                    buf_len,<o:p></o:p></p>

<p class=MsoNormal>+             IN                                                           uint8_t                                                                 prot,<o:p></o:p></p>

<p class=MsoNormal>                IN           OUT                                       ipoib_send_NB_SG*
const                          s_buf);<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> static NDIS_STATUS<o:p></o:p></p>

<p class=MsoNormal>@@ -609,11 +610,17 @@<o:p></o:p></p>

<p class=MsoNormal> /* function returns pointer to payload that is going after
IP header.<o:p></o:p></p>

<p class=MsoNormal> *  asssuming that payload and IP header are in the same
buffer<o:p></o:p></p>

<p class=MsoNormal> */<o:p></o:p></p>

<p class=MsoNormal>-static void* GetIpPayloadPtr(const        ip_hdr_t* const                p_ip_hdr)<o:p></o:p></p>

<p class=MsoNormal>+static inline void* GetIpPayloadPtr(const           ip_hdr_t*
const                p_ip_hdr)<o:p></o:p></p>

<p class=MsoNormal> {<o:p></o:p></p>

<p class=MsoNormal>                return (void*)((uint8_t*)p_ip_hdr +
IP_HEADER_LENGTH(p_ip_hdr));<o:p></o:p></p>

<p class=MsoNormal> }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>+static inline void* GetIpv6PayloadPtr(const      ipv6_hdr_t*
const           p_ipv6_hdr)<o:p></o:p></p>

<p class=MsoNormal>+{<o:p></o:p></p>

<p class=MsoNormal>+             return (void*)((uint8_t*)p_ipv6_hdr +
p_ipv6_hdr->payload_length);<o:p></o:p></p>

<p class=MsoNormal>+}<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal> /******************************************************************************<o:p></o:p></p>

<p class=MsoNormal> *<o:p></o:p></p>

<p class=MsoNormal> * Implementation<o:p></o:p></p>

<p class=MsoNormal>@@ -2522,6 +2529,67 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>                                switch( p_ipoib->hdr.type
)<o:p></o:p></p>

<p class=MsoNormal>                                {<o:p></o:p></p>

<p class=MsoNormal>+                             case ETH_PROT_TYPE_IPV6:<o:p></o:p></p>

<p class=MsoNormal>+                                             if( len <
(sizeof(ipoib_hdr_t) + sizeof(ipv6_hdr_t)) )<o:p></o:p></p>

<p class=MsoNormal>+                                             {<o:p></o:p></p>

<p class=MsoNormal>+                                                             IPOIB_PRINT(
TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,<o:p></o:p></p>

<p class=MsoNormal>+                                                                             ("Received
IP packet < min size\n") );<o:p></o:p></p>

<p class=MsoNormal>+                                                             status
= IB_INVALID_SETTING;<o:p></o:p></p>

<p class=MsoNormal>+                                                             break;<o:p></o:p></p>

<p class=MsoNormal>+                                             }<o:p></o:p></p>

<p class=MsoNormal>+                                             <o:p></o:p></p>

<p class=MsoNormal>+                                             if(
p_ipoib->type.ip.hdr_ipv6.next_header != IP_PROT_UDP )<o:p></o:p></p>

<p class=MsoNormal>+                                             {<o:p></o:p></p>

<p class=MsoNormal>+                                                             /*
Unfiltered.  Setup the ethernet header and report. */<o:p></o:p></p>

<p class=MsoNormal>+                                                             cl_perf_start(
RecvTcp );<o:p></o:p></p>

<p class=MsoNormal>+                                                             status
= __recv_gen( p_ipoib, p_eth, p_src, p_dst );<o:p></o:p></p>

<p class=MsoNormal>+                                                             cl_perf_stop(
&p_port->p_adapter->perf, RecvTcp );<o:p></o:p></p>

<p class=MsoNormal>+                                                             break;<o:p></o:p></p>

<p class=MsoNormal>+                                             }<o:p></o:p></p>

<p class=MsoNormal>+                                             //ASSERT(
p_ipoib->type.ip.hdr_ipv6.payload_length == sizeof(ipv6_hdr_t) );<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+                                             /* First
packet of a UDP transfer. */<o:p></o:p></p>

<p class=MsoNormal>+                                             if( len <<o:p></o:p></p>

<p class=MsoNormal>+                                                             (sizeof(ipoib_hdr_t)
+ sizeof(ipv6_hdr_t) + sizeof(udp_hdr_t)) )<o:p></o:p></p>

<p class=MsoNormal>+                                             {<o:p></o:p></p>

<p class=MsoNormal>+                                                             IPOIB_PRINT(
TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,<o:p></o:p></p>

<p class=MsoNormal>+                                                                             ("Received
UDP packet < min size\n") );<o:p></o:p></p>

<p class=MsoNormal>+                                                             status
= IB_INVALID_SETTING;<o:p></o:p></p>

<p class=MsoNormal>+                                                             break;<o:p></o:p></p>

<p class=MsoNormal>+                                             }<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+                                             /* Check if
DHCP conversion is required. */<o:p></o:p></p>

<p class=MsoNormal>+                                             if(
(p_ipoib->type.ip.prot.udp.hdr.dst_port ==
DHCP_IPV6_PORT_SERVER_OR_AGENT&&<o:p></o:p></p>

<p class=MsoNormal>+                                                             p_ipoib->type.ip.prot.udp.hdr.src_port
== DHCP_IPV6_PORT_CLIENT) ||<o:p></o:p></p>

<p class=MsoNormal>+                                                             (p_ipoib->type.ip.prot.udp.hdr.dst_port
== DHCP_IPV6_PORT_CLIENT &&<o:p></o:p></p>

<p class=MsoNormal>+                                                             p_ipoib->type.ip.prot.udp.hdr.src_port
== DHCP_IPV6_PORT_SERVER_OR_AGENT))<o:p></o:p></p>

<p class=MsoNormal>+                                             {<o:p></o:p></p>

<p class=MsoNormal>+                                                             //TODO
should be DHCP IPv6<o:p></o:p></p>

<p class=MsoNormal>+                                                             if(
len < (sizeof(ipoib_hdr_t) + sizeof(ipv6_hdr_t) +<o:p></o:p></p>

<p class=MsoNormal>+                                                                             sizeof(udp_hdr_t)
/*+ DHCP_MIN_SIZE*/) )<o:p></o:p></p>

<p class=MsoNormal>+                                                             {<o:p></o:p></p>

<p class=MsoNormal>+                                                                             IPOIB_PRINT(
TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,<o:p></o:p></p>

<p class=MsoNormal>+                                                                                             ("Received
DHCP < min size\n") );<o:p></o:p></p>

<p class=MsoNormal>+                                                                             status
= IB_INVALID_SETTING;<o:p></o:p></p>

<p class=MsoNormal>+                                                                             break;<o:p></o:p></p>

<p class=MsoNormal>+                                                             }<o:p></o:p></p>

<p class=MsoNormal>+                                                             <o:p></o:p></p>

<p class=MsoNormal>+                                                             /*
UDP packet with BOOTP ports in src/dst port numbers. */<o:p></o:p></p>

<p class=MsoNormal>+                                                             cl_perf_start(
RecvDhcp );<o:p></o:p></p>

<p class=MsoNormal>+                                                             //TODO
implement this function<o:p></o:p></p>

<p class=MsoNormal>+                                                             //status
= __recv_dhcp_ipv6( p_port, p_ipoib, p_eth, p_src, p_dst );<o:p></o:p></p>

<p class=MsoNormal>+                                                             status
= IB_INVALID_SETTING;<o:p></o:p></p>

<p class=MsoNormal>+                                                             cl_perf_stop(
&p_port->p_adapter->perf, RecvDhcp );<o:p></o:p></p>

<p class=MsoNormal>+                                             }<o:p></o:p></p>

<p class=MsoNormal>+                                             else<o:p></o:p></p>

<p class=MsoNormal>+                                             {<o:p></o:p></p>

<p class=MsoNormal>+                                                             /*
Unfiltered.  Setup the ethernet header and report. */<o:p></o:p></p>

<p class=MsoNormal>+                                                             cl_perf_start(
RecvUdp );<o:p></o:p></p>

<p class=MsoNormal>+                                                             status
= __recv_gen( p_ipoib, p_eth, p_src, p_dst );<o:p></o:p></p>

<p class=MsoNormal>+                                                             cl_perf_stop(
&p_port->p_adapter->perf, RecvUdp );<o:p></o:p></p>

<p class=MsoNormal>+                                             }<o:p></o:p></p>

<p class=MsoNormal>+                                             break;<o:p></o:p></p>

<p class=MsoNormal>+                                             <o:p></o:p></p>

<p class=MsoNormal>                                case ETH_PROT_TYPE_IP:<o:p></o:p></p>

<p class=MsoNormal>                                                if( len <
(sizeof(ipoib_hdr_t) + sizeof(ip_hdr_t)) )<o:p></o:p></p>

<p class=MsoNormal>                                                {<o:p></o:p></p>

<p class=MsoNormal>@@ -3479,6 +3547,11 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>                switch( p_eth_hdr->type )<o:p></o:p></p>

<p class=MsoNormal>                {<o:p></o:p></p>

<p class=MsoNormal>+             case ETH_PROT_TYPE_IPV6:<o:p></o:p></p>

<p class=MsoNormal>+                             cl_perf_start( FilterIpV6 );<o:p></o:p></p>

<p class=MsoNormal>+                             status = __send_mgr_filter_ip(
p_eth_hdr, p_mdl, buf_len, s_buf );<o:p></o:p></p>

<p class=MsoNormal>+                             cl_perf_stop(
&p_port->p_adapter->perf, FilterIpV6 );<o:p></o:p></p>

<p class=MsoNormal>+                             break;<o:p></o:p></p>

<p class=MsoNormal>                case ETH_PROT_TYPE_IP:<o:p></o:p></p>

<p class=MsoNormal>                                cl_perf_start( FilterIp );<o:p></o:p></p>

<p class=MsoNormal>                                status =
__send_mgr_filter_ip( p_eth_hdr, p_mdl, buf_len, s_buf );<o:p></o:p></p>

<p class=MsoNormal>@@ -4294,10 +4367,12 @@<o:p></o:p></p>

<p class=MsoNormal>                IN                                                           ipoib_send_NB_SG                                        *s_buf
)<o:p></o:p></p>

<p class=MsoNormal> {<o:p></o:p></p>

<p class=MsoNormal>                NDIS_STATUS                    status;<o:p></o:p></p>

<p class=MsoNormal>-              ip_hdr_t                              *p_ip_hdr;<o:p></o:p></p>

<p class=MsoNormal>+             PVOID                                   p_ip_hdr;<o:p></o:p></p>

<p class=MsoNormal>                uint32_t                               ip_packet_len;<o:p></o:p></p>

<p class=MsoNormal>                size_t                                    iph_size_in_bytes;<o:p></o:p></p>

<p class=MsoNormal>                size_t                                    iph_options_size;<o:p></o:p></p>

<p class=MsoNormal>+             uint8_t                                 prot;<o:p></o:p></p>

<p class=MsoNormal>+             size_t                                    hdr_size;<o:p></o:p></p>

<p class=MsoNormal>                <o:p></o:p></p>

<p class=MsoNormal>                PERF_DECLARE( QueryIp );<o:p></o:p></p>

<p class=MsoNormal>                PERF_DECLARE( SendTcp );<o:p></o:p></p>

<p class=MsoNormal>@@ -4328,23 +4403,33 @@<o:p></o:p></p>

<p class=MsoNormal>                }<o:p></o:p></p>

<p class=MsoNormal>                else<o:p></o:p></p>

<p class=MsoNormal>                {<o:p></o:p></p>

<p class=MsoNormal>-                              p_ip_hdr =
(ip_hdr_t*)(p_eth_hdr + 1);<o:p></o:p></p>

<p class=MsoNormal>+                                             p_ip_hdr =
(PVOID) (p_eth_hdr + 1);<o:p></o:p></p>

<p class=MsoNormal>                }<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>-              if( buf_len < sizeof(ip_hdr_t) )<o:p></o:p></p>

<p class=MsoNormal>+             <o:p></o:p></p>

<p class=MsoNormal>+             if ( p_eth_hdr->type == ETH_PROT_TYPE_IPV6
) <o:p></o:p></p>

<p class=MsoNormal>                {<o:p></o:p></p>

<p class=MsoNormal>+                             prot = ((ipv6_hdr_t *)
p_ip_hdr)->next_header;<o:p></o:p></p>

<p class=MsoNormal>+                             hdr_size = sizeof(ipv6_hdr_t);<o:p></o:p></p>

<p class=MsoNormal>+             }<o:p></o:p></p>

<p class=MsoNormal>+             else //IPv4<o:p></o:p></p>

<p class=MsoNormal>+             {<o:p></o:p></p>

<p class=MsoNormal>+                             prot = ((ip_hdr_t *)
p_ip_hdr)->prot;<o:p></o:p></p>

<p class=MsoNormal>+                             hdr_size = sizeof(ip_hdr_t);<o:p></o:p></p>

<p class=MsoNormal>+             }<o:p></o:p></p>

<p class=MsoNormal>+             if( buf_len < hdr_size )<o:p></o:p></p>

<p class=MsoNormal>+             {<o:p></o:p></p>

<p class=MsoNormal>                                /* This buffer is done for. 
Get the next buffer. */<o:p></o:p></p>

<p class=MsoNormal>                                IPOIB_PRINT_EXIT(
TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,<o:p></o:p></p>

<p class=MsoNormal>                                                ("Buffer
too small for IP packet.\n") );<o:p></o:p></p>

<p class=MsoNormal>                                return
NDIS_STATUS_BUFFER_TOO_SHORT;<o:p></o:p></p>

<p class=MsoNormal>                }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-              switch( p_ip_hdr->prot )<o:p></o:p></p>

<p class=MsoNormal>+             switch( prot )<o:p></o:p></p>

<p class=MsoNormal>                {<o:p></o:p></p>

<p class=MsoNormal>                case IP_PROT_UDP:<o:p></o:p></p>

<p class=MsoNormal>                                cl_perf_start( FilterUdp );<o:p></o:p></p>

<p class=MsoNormal>                                status =
__send_mgr_filter_udp( p_ip_hdr, p_mdl,<o:p></o:p></p>

<p class=MsoNormal>-                                                                                                                                                              (buf_len
- sizeof(ip_hdr_t)), s_buf );<o:p></o:p></p>

<p class=MsoNormal>+                                                                                                                                                             (buf_len
- hdr_size), prot, s_buf );<o:p></o:p></p>

<p class=MsoNormal>                                cl_perf_stop(
&p_port->p_adapter->perf, FilterUdp );<o:p></o:p></p>

<p class=MsoNormal>                                if( status ==
NDIS_STATUS_PENDING )<o:p></o:p></p>

<p class=MsoNormal>                                {  /* not DHCP packet, keep
going */<o:p></o:p></p>

<p class=MsoNormal>@@ -4366,7 +4451,7 @@<o:p></o:p></p>

<p class=MsoNormal>                                2. ip options<o:p></o:p></p>

<p class=MsoNormal>                                                So to get
the IGMP packet we need to skip the ip options NDIS_BUFFER<o:p></o:p></p>

<p class=MsoNormal>                                */<o:p></o:p></p>

<p class=MsoNormal>-                                              iph_size_in_bytes
= (p_ip_hdr->ver_hl & 0xf) * 4;<o:p></o:p></p>

<p class=MsoNormal>+                                             iph_size_in_bytes
= (((ip_hdr_t*)p_ip_hdr)->ver_hl & 0xf) * 4;<o:p></o:p></p>

<p class=MsoNormal>                                                iph_options_size
= iph_size_in_bytes - buf_len;<o:p></o:p></p>

<p class=MsoNormal>                                                buf_len -=
sizeof(ip_hdr_t);//without ipheader<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>@@ -4376,7 +4461,7 @@<o:p></o:p></p>

<p class=MsoNormal>                                We anyway pass it to
__send_mgr_filter_igmp_v2().<o:p></o:p></p>

<p class=MsoNormal>                                */<o:p></o:p></p>

<p class=MsoNormal>                                status =
__send_mgr_filter_igmp_v2( s_buf->p_port,<o:p></o:p></p>

<p class=MsoNormal>-                                                                                                                                                                              p_ip_hdr,<o:p></o:p></p>

<p class=MsoNormal>+                                                                                                                                                                             (ip_hdr_t*)
p_ip_hdr,<o:p></o:p></p>

<p class=MsoNormal>                                                                                                                                                                                iph_options_size,<o:p></o:p></p>

<p class=MsoNormal>                                                                                                                                                                                p_mdl,<o:p></o:p></p>

<p class=MsoNormal>                                                                                                                                                                                buf_len
);<o:p></o:p></p>

<p class=MsoNormal>@@ -4384,6 +4469,7 @@<o:p></o:p></p>

<p class=MsoNormal>                                                return
status;<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>                case IP_PROT_ICMP:<o:p></o:p></p>

<p class=MsoNormal>+             case IP_PROT_ICMPV6:<o:p></o:p></p>

<p class=MsoNormal>                                p_desc->send_dir =
SEND_UD_QP;<o:p></o:p></p>

<p class=MsoNormal>                default:<o:p></o:p></p>

<p class=MsoNormal>                                break;<o:p></o:p></p>

<p class=MsoNormal>@@ -4400,7 +4486,7 @@<o:p></o:p></p>

<p class=MsoNormal>                }<o:p></o:p></p>

<p class=MsoNormal>                if( p_desc->send_dir == SEND_UD_QP )<o:p></o:p></p>

<p class=MsoNormal>                {<o:p></o:p></p>

<p class=MsoNormal>-                              ip_packet_len = cl_ntoh16(
p_ip_hdr->length );<o:p></o:p></p>

<p class=MsoNormal>+                             ip_packet_len = cl_ntoh16(
((ip_hdr_t*)p_ip_hdr)->length ); //TODO add IPv6 support for CM flow<o:p></o:p></p>

<p class=MsoNormal>                                if( ip_packet_len  >
s_buf->p_port->p_adapter->params.payload_mtu )<o:p></o:p></p>

<p class=MsoNormal>                                {<o:p></o:p></p>

<p class=MsoNormal>                                                //TODO:
NDIS60<o:p></o:p></p>

<p class=MsoNormal>@@ -4565,10 +4651,11 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> static NDIS_STATUS<o:p></o:p></p>

<p class=MsoNormal> __send_mgr_filter_udp(<o:p></o:p></p>

<p class=MsoNormal>-              IN                           const     ip_hdr_t*
const                                                                p_ip_hdr,<o:p></o:p></p>

<p class=MsoNormal>-              IN                                                           MDL*                                                                                    p_mdl,<o:p></o:p></p>

<p class=MsoNormal>-              IN                                                           size_t                                                                                    buf_len,<o:p></o:p></p>

<p class=MsoNormal>-              IN           OUT                                       ipoib_send_NB_SG*                                      s_buf
)<o:p></o:p></p>

<p class=MsoNormal>+             IN                           const     void*
const                                                         p_ip_hdr,<o:p></o:p></p>

<p class=MsoNormal>+             IN                                                           MDL*                                                                    p_mdl,<o:p></o:p></p>

<p class=MsoNormal>+             IN                                                           size_t                                                                    buf_len,<o:p></o:p></p>

<p class=MsoNormal>+             IN                                                           uint8_t                                                                 prot,<o:p></o:p></p>

<p class=MsoNormal>+             IN           OUT                                       ipoib_send_NB_SG*                      s_buf
)<o:p></o:p></p>

<p class=MsoNormal> {<o:p></o:p></p>

<p class=MsoNormal>                NDIS_STATUS                                    status;<o:p></o:p></p>

<p class=MsoNormal>                udp_hdr_t                                          *p_udp_hdr;<o:p></o:p></p>

<p class=MsoNormal>@@ -4598,17 +4685,25 @@<o:p></o:p></p>

<p class=MsoNormal>                }<o:p></o:p></p>

<p class=MsoNormal>                else<o:p></o:p></p>

<p class=MsoNormal>                {<o:p></o:p></p>

<p class=MsoNormal>-                              p_udp_hdr =
(udp_hdr_t*)GetIpPayloadPtr(p_ip_hdr);<o:p></o:p></p>

<p class=MsoNormal>+                             if ( prot ==
ETH_PROT_TYPE_IPV6 ) <o:p></o:p></p>

<p class=MsoNormal>+                             {<o:p></o:p></p>

<p class=MsoNormal>+                                             p_udp_hdr =
(udp_hdr_t*)GetIpv6PayloadPtr((ipv6_hdr_t*)p_ip_hdr);<o:p></o:p></p>

<p class=MsoNormal>+                             }<o:p></o:p></p>

<p class=MsoNormal>+                             else //IPv4<o:p></o:p></p>

<p class=MsoNormal>+                             {<o:p></o:p></p>

<p class=MsoNormal>+                                             p_udp_hdr =
(udp_hdr_t*)GetIpPayloadPtr((ip_hdr_t*)p_ip_hdr);<o:p></o:p></p>

<p class=MsoNormal>+                                             if
(((ip_hdr_t*)p_ip_hdr)->offset > 0) {<o:p></o:p></p>

<p class=MsoNormal>+                                                             /*
This is a fragmented part of UDP packet<o:p></o:p></p>

<p class=MsoNormal>+                                                             
* Only first packet will contain UDP header in such case<o:p></o:p></p>

<p class=MsoNormal>+                                                             
* So, return if offset > 0<o:p></o:p></p>

<p class=MsoNormal>+                                                             
*/<o:p></o:p></p>

<p class=MsoNormal>+                                                             
return NDIS_STATUS_PENDING;<o:p></o:p></p>

<p class=MsoNormal>+                                             }<o:p></o:p></p>

<p class=MsoNormal>+                             }<o:p></o:p></p>

<p class=MsoNormal>                }<o:p></o:p></p>

<p class=MsoNormal>                /* Get the UDP header and check the
destination port numbers. */<o:p></o:p></p>

<p class=MsoNormal>                <o:p></o:p></p>

<p class=MsoNormal>-              if (p_ip_hdr->offset > 0) {<o:p></o:p></p>

<p class=MsoNormal>-                              /* This is a fragmented part
of UDP packet<o:p></o:p></p>

<p class=MsoNormal>-                               * Only first packet will
contain UDP header in such case<o:p></o:p></p>

<p class=MsoNormal>-                               * So, return if offset >
0<o:p></o:p></p>

<p class=MsoNormal>-                               */<o:p></o:p></p>

<p class=MsoNormal>-                               return NDIS_STATUS_PENDING;<o:p></o:p></p>

<p class=MsoNormal>-              }<o:p></o:p></p>

<p class=MsoNormal>+             <o:p></o:p></p>

<p class=MsoNormal>                                 <o:p></o:p></p>

<p class=MsoNormal>                if( buf_len < sizeof(udp_hdr_t) )<o:p></o:p></p>

<p class=MsoNormal>                {<o:p></o:p></p>

<p class=MsoNormal>@@ -4617,13 +4712,26 @@<o:p></o:p></p>

<p class=MsoNormal>                                return
NDIS_STATUS_BUFFER_TOO_SHORT;<o:p></o:p></p>

<p class=MsoNormal>                }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-              if( (p_udp_hdr->src_port !=
DHCP_PORT_CLIENT ||<o:p></o:p></p>

<p class=MsoNormal>-                              p_udp_hdr->dst_port !=
DHCP_PORT_SERVER) &&<o:p></o:p></p>

<p class=MsoNormal>-                              (p_udp_hdr->src_port !=
DHCP_PORT_SERVER ||<o:p></o:p></p>

<p class=MsoNormal>-                              p_udp_hdr->dst_port !=
DHCP_PORT_CLIENT) )<o:p></o:p></p>

<p class=MsoNormal>+             if ( prot == ETH_PROT_TYPE_IPV6 ) {<o:p></o:p></p>

<p class=MsoNormal>+                             if( (p_udp_hdr->src_port !=
DHCP_PORT_CLIENT ||<o:p></o:p></p>

<p class=MsoNormal>+                                             p_udp_hdr->dst_port
!= DHCP_PORT_SERVER) &&<o:p></o:p></p>

<p class=MsoNormal>+                                             (p_udp_hdr->src_port
!= DHCP_PORT_SERVER ||<o:p></o:p></p>

<p class=MsoNormal>+                                             p_udp_hdr->dst_port
!= DHCP_PORT_CLIENT) )<o:p></o:p></p>

<p class=MsoNormal>+                             {<o:p></o:p></p>

<p class=MsoNormal>+                                             /* Not a DHCP
packet. */<o:p></o:p></p>

<p class=MsoNormal>+                                             return
NDIS_STATUS_PENDING;<o:p></o:p></p>

<p class=MsoNormal>+                             }<o:p></o:p></p>

<p class=MsoNormal>+             }<o:p></o:p></p>

<p class=MsoNormal>+             else //IPv4<o:p></o:p></p>

<p class=MsoNormal>                {<o:p></o:p></p>

<p class=MsoNormal>-                              /* Not a DHCP packet. */<o:p></o:p></p>

<p class=MsoNormal>-                              return NDIS_STATUS_PENDING;<o:p></o:p></p>

<p class=MsoNormal>+                             if( (p_udp_hdr->src_port !=
DHCP_IPV6_PORT_CLIENT||<o:p></o:p></p>

<p class=MsoNormal>+                                             p_udp_hdr->dst_port
!= DHCP_IPV6_PORT_SERVER_OR_AGENT) &&<o:p></o:p></p>

<p class=MsoNormal>+                                             (p_udp_hdr->src_port
!= DHCP_IPV6_PORT_SERVER_OR_AGENT ||<o:p></o:p></p>

<p class=MsoNormal>+                                             p_udp_hdr->dst_port
!= DHCP_IPV6_PORT_CLIENT) )<o:p></o:p></p>

<p class=MsoNormal>+                             {<o:p></o:p></p>

<p class=MsoNormal>+                                             /* Not a DHCP
packet. */<o:p></o:p></p>

<p class=MsoNormal>+                                             return
NDIS_STATUS_PENDING;<o:p></o:p></p>

<p class=MsoNormal>+                             }<o:p></o:p></p>

<p class=MsoNormal>                }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>                buf_len -= sizeof(udp_hdr_t);<o:p></o:p></p>

<p class=MsoNormal>@@ -4638,7 +4746,16 @@<o:p></o:p></p>

<p class=MsoNormal>                                return
NDIS_STATUS_RESOURCES;<o:p></o:p></p>

<p class=MsoNormal>                }<o:p></o:p></p>

<p class=MsoNormal>                /* Copy the IP and UDP headers. */<o:p></o:p></p>

<p class=MsoNormal>-              cl_memcpy(
&s_buf->p_send_buf->ip.hdr, p_ip_hdr , sizeof(ip_hdr_t) );<o:p></o:p></p>

<p class=MsoNormal>+             //TODO: in this case we limited IP size to 20,
but it can be bigger, according to GetIpPayloadPtr<o:p></o:p></p>

<p class=MsoNormal>+             if ( prot == ETH_PROT_TYPE_IPV6 ) <o:p></o:p></p>

<p class=MsoNormal>+             {<o:p></o:p></p>

<p class=MsoNormal>+                             cl_memcpy(
&s_buf->p_send_buf->ip.hdr_ipv6, p_ip_hdr , sizeof(ipv6_hdr_t) );<o:p></o:p></p>

<p class=MsoNormal>+             }<o:p></o:p></p>

<p class=MsoNormal>+             else<o:p></o:p></p>

<p class=MsoNormal>+             {<o:p></o:p></p>

<p class=MsoNormal>+                             cl_memcpy(
&s_buf->p_send_buf->ip.hdr, p_ip_hdr , sizeof(ip_hdr_t) );<o:p></o:p></p>

<p class=MsoNormal>+             }<o:p></o:p></p>

<p class=MsoNormal>+             <o:p></o:p></p>

<p class=MsoNormal>                cl_memcpy(<o:p></o:p></p>

<p class=MsoNormal>                                &s_buf->p_send_buf->ip.prot.udp.hdr,
p_udp_hdr, sizeof(udp_hdr_t) );<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal><b>Alexander (XaleX) Naslednikov<o:p></o:p></b></p>

<p class=MsoNormal><b>SW Networking Team<o:p></o:p></b></p>

<p class=MsoNormal><b>Mellanox Technologies<o:p></o:p></b></p>

<p class=MsoNormal><o:p> </o:p></p>

</div>

</body>

</html>