<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Windows Core Networking : ndis</title><link>http://blogs.msdn.com/wndp/archive/tags/ndis/default.aspx</link><description>Tags: ndis</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>WiFi WMM Requirements for Vista Miniport Drivers</title><link>http://blogs.msdn.com/wndp/archive/2007/09/18/wifi-wmm-requirements-for-vista-miniport-drivers.aspx</link><pubDate>Tue, 18 Sep 2007 18:00:31 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4967008</guid><dc:creator>wndpteam</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wndp/comments/4967008.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wndp/commentrss.aspx?PostID=4967008</wfw:commentRss><description>&lt;p&gt;&lt;font size="2"&gt;A number of partners who author wireless drivers for Vista have asked how they can ensure their WiFi Wireless Multimedia (WMM) implementation is correct, so I thought I'd be explicit about this very important topic. To begin, read the 4-part series &lt;/font&gt;&lt;a href="http://blogs.msdn.com/wndp/archive/2006/06/28/650363.aspx" target="_blank"&gt;&lt;font size="2"&gt;WiFi QoS Support in Windows Vista&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;, which describes how Vista internally indicates a WMM Access Category (WMM_AC), how to detect whether an Access Point supports this capability, and how to observe the behavior of prioritized traffic. Next, be sure you explicitly validate your driver does the following:&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size="2"&gt; &lt;p&gt;&lt;font size="2"&gt;Confirm the QoS header exists in 802.11 data frames when DSCP and 802.1p are set independently:&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;/li&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;DSCP [56, 48, 40, 32, 24, 16, 8, 0]&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;802.1p [7, 6, 5, 4, 3, 2, 1, 0]&lt;/font&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Ensure the miniport indicates &lt;em&gt;NDIS_MAC_OPTION_8021P_PRIORITY&lt;/em&gt; in &lt;em&gt;OID_GEN_MAC_OPTIONS&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Miniport behavior on receive:&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;If WMM/11e header is stripped, WMM bit in &lt;em&gt;FrameControlSubtype&lt;/em&gt; must be cleared&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;If WMM/11e header is not stripped, WMM bit in &lt;em&gt;FrameControlSubtype&lt;/em&gt; must *&lt;b&gt;not&lt;/b&gt;* be cleared&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Must *&lt;b&gt;not&lt;/b&gt;* strip 802.1Q tag in SNAP header (nwifi.sys will strip if necessary&lt;/font&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Miniport behavior on transmit:&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Only use &lt;em&gt;NDIS_NET_BUFFER_LIST_8021Q_INFO.WMMInfo&lt;/em&gt; field to ascertain correct WMM_AC (*&lt;b&gt;not&lt;/b&gt;* &lt;em&gt;UserPriority&lt;/em&gt;, or IP DSCP field)&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;font size="2"&gt; &lt;p&gt;&lt;font size="2"&gt;Must not strip 802.1Q tag in SNAP header (may be added by nwifi.sys)&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;font size="2"&gt; &lt;p&gt;-- Gabe Frost&lt;/font&gt;&lt;font size="2"&gt;&lt;/p&gt;&lt;/font&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4967008" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wndp/archive/tags/QoS/default.aspx">QoS</category><category domain="http://blogs.msdn.com/wndp/archive/tags/ndis/default.aspx">ndis</category></item><item><title>Detecting 802.1p Priority Tags: Part 3</title><link>http://blogs.msdn.com/wndp/archive/2007/09/14/detecting-802-1p-priority-tags-part-3.aspx</link><pubDate>Sat, 15 Sep 2007 01:39:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4918303</guid><dc:creator>wndpteam</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/wndp/comments/4918303.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wndp/commentrss.aspx?PostID=4918303</wfw:commentRss><description>&lt;p&gt;Parts &lt;a href="http://blogs.msdn.com/wndp/archive/2007/09/07/detecting-802-1p-priority-tags.aspx" target="_blank"&gt;1&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/wndp/archive/2007/09/13/detecting-802-1p-priority-tags-part-2.aspx" target="_blank"&gt;2&lt;/a&gt; of this series discussed how to determine whether an 802.1p tag was added to traffic, and how to modify the NDIS light-weight-filter (LWF) sample driver source code to accomplish this task. We do know that you're all very busy and not everyone is a developer, so we've added to the package: full source code for the complete filter driver, a command-line tool for accessing the filtered packets, and compiled binaries for you non-developers. We also added the ability to validate *both* 802.1p and DSCP (from the IPv4/IPv6 header). This additional package was added to the existing download, so if you haven't already read part-2 of this series, do so now and you'll find download instructions there. For installation instructions, read the README file in the zip archive. &lt;/p&gt; &lt;p&gt;What do you think? Is this approach (source and tools) helpful? We do actively monitor the &lt;a href="http://forums.microsoft.com/msdn/showforum.aspx?forumid=825&amp;amp;siteid=1" target="_blank"&gt;QoS forum&lt;/a&gt;, so let us know how we can improve your understanding of Windows QoS capabilities.&lt;/p&gt; &lt;p&gt;-- Gabe Frost&lt;/p&gt; &lt;p&gt;-- Huge thanks to Hemant Banavar who authored the tools&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4918303" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wndp/archive/tags/QoS/default.aspx">QoS</category><category domain="http://blogs.msdn.com/wndp/archive/tags/ndis/default.aspx">ndis</category></item><item><title>Detecting 802.1p Priority Tags: Part 2</title><link>http://blogs.msdn.com/wndp/archive/2007/09/13/detecting-802-1p-priority-tags-part-2.aspx</link><pubDate>Fri, 14 Sep 2007 02:43:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4902488</guid><dc:creator>wndpteam</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wndp/comments/4902488.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wndp/commentrss.aspx?PostID=4902488</wfw:commentRss><description>&lt;p&gt;&lt;font size="2"&gt;In Gabe’s last post on detecting 802.1p priority tags, he described at a relatively high-level why it is difficult to detect a priority tag using packet tracing applications, as well as the proper way to determine whether a tag was present in a packet that was sent onto the wire (or air). In this post, I’ll describe how to programmatically access this information by modifying the NDIS Light Weight Filter (LWF) sample driver found in the &lt;/font&gt;&lt;a href="http://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx"&gt;&lt;font size="2"&gt;Windows Driver Kit&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; (WDK). To begin, download and install the WDK and navigate to the LWF sample found in the &lt;i&gt;WinDDK\6000\src\network\ndis\filter&lt;/i&gt; directory. The remainder of this post will describe how to modify this sample to gain access to the &lt;i&gt;UserPriority&lt;/i&gt; value in the out-of-band (OOB) data of a Net Buffer List (NBL) structure, and whether the miniport driver actually stripped the 1Q tag from the Ethernet header like it was supposed to. Based on what part-1 of this series describes about driver (miniport/LWF) layering and framing details, the modified driver will inspect received packets (meaning the sender added the tag to outgoing traffic).&lt;/font&gt;  &lt;p&gt;&lt;font size="2"&gt;The source file in the LWF sample of particular interest is &lt;i&gt;filter.c&lt;/i&gt;, where we’ll modify the &lt;i&gt;FilterReceiveNetBufferLists() &lt;/i&gt;function. &lt;i&gt;FilterReceiveNetBufferLists() &lt;/i&gt;is an optional function for filter drivers, which if provided, processes receive indications made by the underlying miniport or filter drivers beneath in the stack. If this handler is &lt;i&gt;NULL&lt;/i&gt;, NDIS will skip calling this filter when processing a receive indication and will call the next filter (or protocol driver) above in the stack with a non-&lt;i&gt;NULL&lt;/i&gt; &lt;i&gt;FilterReceiveNetBufferLists &lt;/i&gt;handler. The remainder of this post goes into detail about which areas of &lt;i&gt;filter.c &lt;/i&gt;need to be modified.&lt;/font&gt;  &lt;p&gt;&lt;font size="2"&gt;To begin, let’s explore how to access the received packets in this function so they can be inspected. The second parameter to the function, &lt;i&gt;NetBufferLists, &lt;/i&gt;is a linked list of &lt;i&gt;NetBufferList &lt;/i&gt;structures allocated by the underlying driver. Each &lt;i&gt;NetBufferList &lt;/i&gt;contains one &lt;i&gt;NetBuffer &lt;/i&gt;structure, which represents a received packet. This means, in order to inspect each packet in the &lt;i&gt;NetBufferLists &lt;/i&gt;linked list, we need a loop of the following kind within &lt;i&gt;FilterReceiveNetBufferLists():&lt;/i&gt;&lt;/font&gt;  &lt;blockquote&gt; &lt;p&gt;&lt;font face="Times New Roman" color="#000000" size="2"&gt;if (pFilter-&amp;gt;TrackReceives) &lt;/font&gt; &lt;p&gt;&lt;font face="Times New Roman" color="#000000" size="2"&gt;{&lt;/font&gt;  &lt;p&gt;&lt;font face="Times New Roman" color="#000000" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILTER_ACQUIRE_LOCK(&amp;amp;pFilter-&amp;gt;Lock, DispatchLevel);&lt;/font&gt;  &lt;p&gt;&lt;font face="Times New Roman" color="#000000" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pFilter-&amp;gt;OutstandingRcvs += NumberOfNetBufferLists;&lt;/font&gt;  &lt;p&gt;&lt;font face="Times New Roman" color="#000000" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ref = pFilter-&amp;gt;OutstandingRcvs;&lt;/font&gt;  &lt;p&gt;&lt;font face="Times New Roman" color="#000000" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; currNbl = NetBufferLists;&lt;/font&gt;  &lt;p&gt;&lt;font face="Times New Roman" color="#000000" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(currNbl)&lt;/font&gt;  &lt;p&gt;&lt;font face="Times New Roman" color="#000000" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;  &lt;p&gt;&lt;font face="Times New Roman"&gt;&lt;font color="#000000" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Call the function to parse the packet in each &lt;/font&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Times New Roman"&gt;&lt;font color="#000000" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // NetBufferList (one net buffer per NBL )&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;&lt;font face="Times New Roman" color="#000000" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inspectNetBuffer(currNbl, pFilter);&lt;/font&gt;  &lt;p&gt;&lt;font face="Times New Roman" color="#000000" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; currNbl = currNbl-&amp;gt;Next;&lt;/font&gt;  &lt;p&gt;&lt;font face="Times New Roman" color="#000000" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;  &lt;p&gt;&lt;font face="Times New Roman" color="#000000" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILTER_LOG_RCV_REF(1, pFilter, NetBufferLists, Ref);&lt;/font&gt;  &lt;p&gt;&lt;font face="Times New Roman" color="#000000" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILTER_RELEASE_LOCK(&amp;amp;pFilter-&amp;gt;Lock, DispatchLevel);&lt;/font&gt;  &lt;p&gt;&lt;font face="Times New Roman" color="#000000" size="2"&gt;}&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;font size="2"&gt;In the above code snippet, observe that the loop is run only if &lt;i&gt;pFilter-&amp;gt;TrackReceives &lt;/i&gt;is &lt;i&gt;TRUE&lt;/i&gt;. The idea here is to only inspect packets if the user requests the driver to do receive-side inspections (our focus is on a debugging tool). The &lt;i&gt;TrackReceives &lt;/i&gt;flag can be set to &lt;i&gt;FALSE &lt;/i&gt;at &lt;i&gt;FilterAttach&lt;/i&gt; and can be set to &lt;i&gt;TRUE &lt;/i&gt;through an IOCTL. Look at the &lt;i&gt;FilterDeviceIoControl() &lt;/i&gt;function in &lt;i&gt;device.c &lt;/i&gt;for defining IOCTLs. &lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;Now that we have a pointer to the &lt;i&gt;NetBufferList &lt;/i&gt;structure which holds the packet information, let’s explore how to inspect the packet for the 802.1p tag (note you could also inspect the IPv4 or IPv6 header for DSCP here if you really wanted). The &lt;i&gt;inspectNetBuffer&lt;/i&gt; function in the above code snippet starts by extracting the &lt;i&gt;NetBuffer &lt;/i&gt;pointer from the &lt;i&gt;NetBufferList&lt;/i&gt;. Please see the bottom of this post for instructions on where to download the full implementation of this function. Next, if an 802.1p tag is available in the OOB data, it is extracted and stored in the variable called &lt;i&gt;UserPriority &lt;/i&gt;as follows:&lt;/font&gt;  &lt;blockquote&gt; &lt;p&gt;&lt;font face="times" size="2"&gt;if (NET_BUFFER_LIST_INFO&lt;/font&gt; &lt;p&gt;&lt;font face="times" size="2"&gt;(pNetBufferList, Ieee8021QNetBufferListInfo) != 0) &lt;/font&gt; &lt;p&gt;&lt;font face="times" size="2"&gt;{ &lt;/font&gt; &lt;p&gt;&lt;font face="times" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ndis8021QInfo.Value = NET_BUFFER_LIST_INFO(pNetBufferList, Ieee8021QNetBufferListInfo); &lt;/font&gt; &lt;p&gt;&lt;font face="times" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UserPriority = (UCHAR)Ndis8021QInfo.TagHeader.UserPriority; &lt;/font&gt; &lt;p&gt;&lt;font face="times" size="2"&gt;}&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;font size="2"&gt;At this point, a pointer to the start of the packet is obtained and stored in &lt;i&gt;packetBuffer&lt;/i&gt;. The Ethernet header is parsed and &lt;i&gt;RecdUnStrippedPackets &lt;/i&gt;(which is initialized to zero at the beginning before starting to track received packets) is incremented if it is found that the Ethernet header still contains the 802.1p tag - indicating the underlying miniport did not strip the tag as per NDIS documentation.&lt;/font&gt;  &lt;p&gt;&lt;font size="2"&gt;To download the full implementation of &lt;i&gt;inspectNetBuffer()&lt;/i&gt;, as used to do the majority of parsing work, go to &lt;/font&gt;&lt;a href="http://connect.microsoft.com/"&gt;&lt;font size="2"&gt;Microsoft Connect&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; website and login using your passport account (create one if you don’t already have one). Once you have logged in, choose &lt;i&gt;Available Connections &lt;/i&gt;on the left-hand side of the page, and select &lt;i&gt;Windows Networking &lt;/i&gt;from the available connections (bottom half of the page). On the left-hand side of the &lt;i&gt;Windows Networking &lt;/i&gt;page, choose &lt;i&gt;Downloads&lt;/i&gt;, and select &lt;i&gt;NDIS LWF Sample With Packet Priority Detection&lt;/i&gt;.&lt;/font&gt;  &lt;p&gt;-- Hemant Banavar&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4902488" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wndp/archive/tags/QoS/default.aspx">QoS</category><category domain="http://blogs.msdn.com/wndp/archive/tags/ndis/default.aspx">ndis</category></item><item><title>The Case of Vista Multimedia Playback and Network Throughput</title><link>http://blogs.msdn.com/wndp/archive/2007/08/27/the-case-of-vista-multimedia-playback-and-network-throughput.aspx</link><pubDate>Mon, 27 Aug 2007 20:07:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4594525</guid><dc:creator>wndpteam</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/wndp/comments/4594525.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wndp/commentrss.aspx?PostID=4594525</wfw:commentRss><description>&lt;p&gt;Mark Russinovich has a great post today on the &lt;a href="http://blogs.technet.com/markrussinovich/archive/2007/08/27/1833290.aspx"&gt;what and how of the network/multimedia vista issue&lt;/a&gt; that people have &lt;a href="http://it.slashdot.org/article.pl?sid=07/08/26/1628200"&gt;recently&lt;/a&gt; been talking about. Amusingly enough a couple people on /. more or less figured it out, but are only modded 3 and lower. Go Figure.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;-- Ari&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4594525" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wndp/archive/tags/networking/default.aspx">networking</category><category domain="http://blogs.msdn.com/wndp/archive/tags/ndis/default.aspx">ndis</category></item><item><title>WiFi QoS Support in Windows Vista: WMM part 2</title><link>http://blogs.msdn.com/wndp/archive/2006/06/30/WiFi-QoS-Support-in-Windows-Vista-part-2.aspx</link><pubDate>Fri, 30 Jun 2006 11:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:652003</guid><dc:creator>wndpteam</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/wndp/comments/652003.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wndp/commentrss.aspx?PostID=652003</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;My &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/wndp/archive/2006/06/28/650363.aspx"&gt;&lt;FONT face=Verdana size=2&gt;previous post&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; on WiFi QoS (WMM) discussed the four access classes (BG, BE, VI, and VO) available for traffic differentiation. I also highlighted that packets containing either a layer-2 802.1p tag or layer-3 DSCP mark (i.e.&amp;nbsp;packets associated with a QoS flow) will be added to the correct WMM access class by a Native WiFi (NWF) driver that supports WMM based on the WMMInfo field in the NDIS_NET_BUFFER_LIST_8021Q_INFO structure. However, I did not mention which 802.1p or DSCP values correspond to the four WMM access classes and therefore cause WMMInfo to be populated by Pacer.sys correctly. Before I can answer this, I need to provide a little more, you guessed it, background.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;As Mathias described in his &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/wndp/archive/2006/01/09/511020.aspx"&gt;&lt;FONT face=Verdana size=2&gt;post&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; about 802.1p, there are eight values (0-7) representing traffic classes from background to network control. Mathias also highlighted in his &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/wndp/archive/2006/03/23/559656.aspx"&gt;&lt;FONT face=Verdana size=2&gt;post&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; about DSCP that there are 64 possible values for this field in the IP header. You may be thinking, that things don't align here, and you're right. Because WMM only has four possible traffic classes, and it relies on 802.1p and DSCP to indicate what traffic class to use, there needs to be some major consolidation. The following table lists the four WMM traffic classes and which 802.1p and DSCP values correspond:&lt;/FONT&gt;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;B&gt;&lt;FONT face=Verdana size=2&gt;802.1p&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;&lt;FONT face=Verdana size=2&gt;DSCP&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;&lt;FONT face=Verdana size=2&gt;WMM_AC&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;1&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;16&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;BG&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;2&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;8&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;BG&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;0&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;0&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;BE&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;3&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;24&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;BE&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;4&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;32&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;VI&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;5&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;40&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;VI&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;6&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;48&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;VO&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;7&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;56&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Verdana size=2&gt;VO&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The Qos2 API removes the need to choose the correct 802.1p and/or DSCP values and instead provides a simple enum for available traffic classes:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;typedef enum _QOS_TRAFFIC_TYPE {&lt;BR&gt;&amp;nbsp; &lt;FONT color=#ff0000&gt;QOSTrafficTypeBestEFfort&lt;/FONT&gt;,&lt;BR&gt;&amp;nbsp; &lt;FONT color=#ff0000&gt;QOSTrafficTypeBackground&lt;/FONT&gt;,&lt;BR&gt;&amp;nbsp; QOSTrafficTypeExcellentEffort,&lt;BR&gt;&amp;nbsp; &lt;FONT color=#ff0000&gt;QOSTrafficTypeAudioVideo&lt;/FONT&gt;,&lt;BR&gt;&amp;nbsp; &lt;FONT color=#ff0000&gt;QOSTrafficTypeVoice&lt;/FONT&gt;,&lt;BR&gt;&amp;nbsp; QOSTrafficTypeControl&lt;BR&gt;} QOS_TRAFFIC_TYPE, *PQOS_TRAFFIC_TYPE; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The four traffic types that correspond to WMM_ACs are shown in &lt;FONT color=#ff0000&gt;red&lt;/FONT&gt;. &lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;By way of example, if a Qos2 application specified &lt;EM&gt;QOSTrafficTypeAudioVideo&lt;/EM&gt; for &lt;EM&gt;QOS_TRAFFIC_TYPE&lt;/EM&gt;, outgoing packets for this QoS flow would be marked with a DSCP value of 40 and may have an 802.1p tag with value 5. If you're wondering why I used the word "may" for an 802.1p tag, read my &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/wndp/archive/2005/10/24/484444.aspx"&gt;&lt;FONT face=Verdana size=2&gt;post&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; on the necessity for end-to-end QoS experiments.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Let me know what you think.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;- Gabe Frost&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=652003" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wndp/archive/tags/QoS/default.aspx">QoS</category><category domain="http://blogs.msdn.com/wndp/archive/tags/networking/default.aspx">networking</category><category domain="http://blogs.msdn.com/wndp/archive/tags/ndis/default.aspx">ndis</category></item><item><title>WiFi QoS Support in Windows Vista: WMM</title><link>http://blogs.msdn.com/wndp/archive/2006/06/28/650363.aspx</link><pubDate>Thu, 29 Jun 2006 05:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:650363</guid><dc:creator>wndpteam</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/wndp/comments/650363.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wndp/commentrss.aspx?PostID=650363</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;In Windows Vista, a great deal of effort has gone into making it simple for network applications to take advantage of QoS capable networks. This post focuses on QoS for WiFi networks (both consumer and enterprise) and how the Vista network stack enables differentiated treatment of outgoing traffic. The WiFi Alliance has created a certification for Wireless Multimedia, or WMM, which identifies four access classes (WMM_AC from lowest to highest priority): background, best-effort, video, and voice. In abbreviated form, these classes are BG, BE, VI, and VO. If both the wireless station NIC and access point (AP) support WMM, it is possible to gain differentiated treatment for traffic sent. The good news is that many retail and enterprise APs support this feature, either out of the box, or in the most recent firmware available from the vendor. As for the wireless station adapter, the NIC driver must be WMM capable.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;The WMM specification clearly states that traffic must be assigned to these four aforementioned WMM_AC (to receive differentiated treatment) based on either the MSDU &lt;A href="http://blogs.msdn.com/wndp/archive/2006/01/09/511020.aspx"&gt;802.1Q UserPriority tag&lt;/A&gt; or the &lt;A href="http://blogs.msdn.com/wndp/archive/2006/03/23/559656.aspx"&gt;DSCP mark&lt;/A&gt; in the IP header of a packet. Importantly, from a Windows implementation perspective, the task of assigning outgoing traffic to the appropriate access class is carried out by the wireless NIC driver on the sending station. As such, this driver must be WMM capable. Like wireless APs, the good news is many 802.11g and 802.11a/b/g (and pre-n MIMO) wireless NICs support this feature, either out of the box, or in the most recent firmware available from the vendor.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Now that you have some background, the purpose of this post is to provide details on how (1) vendors writing Native WiFi (NWF) NIC drivers ascertain which access class to assign outgoing traffic to (create WMM capable drivers), and (2) how network sockets-based applications can gain differentiated treatment for traffic sent over the network.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"&gt;&lt;SPAN style="mso-list: Ignore"&gt;1.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;In Windows Vista, the net buffer list (NBL) available to NDIS-6 drivers exposes a new field, WMMInfo, in the &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Palatino Linotype'"&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netlh_r/hh/NetLH_r/ndis6_netbuf_ref_6581b8a1-543e-46fe-a513-f8b2b6780cdd.xml.asp"&gt;NDIS_NET_BUFFER_LIST_8021Q_INFO&lt;/A&gt; structure. A NWF driver need only examine the WMMInfo field to ascertain the correct WMM_AC. When sockets-based applications call QoS APIs or an enterprise QoS policy is enabled (see section 2 below), a QoS flow is created and maintained by the network packet scheduler (Pacer.sys). If 802.1Q UserPriority and/or DSCP are applied to this flow, Pacer.sys will automatically populate WMMInfo correctly. This means that the NIC driver does not have to incur a per-packet performance hit (an improvement over WinXP) from manually parsing each packet to determine the proper WMM_AC.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana"&gt;&lt;SPAN style="mso-list: Ignore"&gt;2.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Palatino Linotype'"&gt;Windows Vista provides a simple set of APIs for adding QoS to sockets-based applications. These functions can be found in qos2.h. I’ll post a detailed description about Qos2 APIs shortly. &lt;a href="http://www.microsoft.com/technet/community/columns/cableguy/cg0306.mspx"&gt;Policy-Based QoS&lt;/a&gt; is also available, which enables IT administrators to specify Group Policies that indicate which applications/users/groups/etc should receive differentiated treatment from QoS capable routers and WiFi APs. Policy-based QoS can be used to easily enable and manage QoS on enterprise WiFi networks.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 10pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;I am interested to hear any feedback or questions about the improved support for WMM in Windows Vista.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;- Gabe Frost&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=650363" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wndp/archive/tags/QoS/default.aspx">QoS</category><category domain="http://blogs.msdn.com/wndp/archive/tags/networking/default.aspx">networking</category><category domain="http://blogs.msdn.com/wndp/archive/tags/ndis/default.aspx">ndis</category></item><item><title>The NDIS 6.0 Driver Model</title><link>http://blogs.msdn.com/wndp/archive/2006/05/15/Winhec-blog-ndis-booth.aspx</link><pubDate>Mon, 15 May 2006 21:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:598167</guid><dc:creator>wndpteam</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/wndp/comments/598167.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wndp/commentrss.aspx?PostID=598167</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;NDIS 6.0 was introduced to the independent hardware vendor (IHV) and developer community at last year’s WinHEC. It brings the promise of greater performance, improved manageability, reduced complexity for NDIS miniports, and simpler models for writing intermediate and filter drivers. Are you curious how much of the promise has been realized? &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;At WinHEC this year, I’ll demonstrate network adapters which maximize network throughput with lower CPU utilization—all by moving to the NDIS 6.0 model. NDIS 6.0 miniport drivers have demonstrated 20% performance improvements over NDIS 5.1 miniport drivers!&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Here are some examples of the feedback we’ve heard from some of our partners inside Microsoft, citing how NDIS 6.0 has made a difference in their scenarios.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Example 1: Pacer, the packet scheduling and shaping component of the Policy-based Quality of Service feature&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;The old Windows Packet Scheduler (PSched) was originally an NDIS 5.0 intermediate miniport. The new Windows Packet Scheduler (Pacer) uses the NDIS 6.0 lightweight filter model, resulting in better performance with lower overhead. In previous releases, enabling PSched in passive mode resulted in a 10% increase in CPU utilization. On Windows Vista, by contrast, enabling Pacer in passive mode results in an increase of only 0.5% in CPU utilization. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Example 2: Network Load Balancing (NLB)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;The NLB development team told us that porting NLB from the intermediate miniport model to the lightweight filter model resulted in simpler code that was much easier to debug. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Example 3: Media Streaming and Interrupt Moderation&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;As the Quality of Service development team can attest, the OIDs for enabling and &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;disabling interrupt moderation make a big difference in accurately measuring available bandwidth, which is key for smoother media streaming in home networks. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Want to see the improvements for yourself? Drop by the WinHEC Hardware showcase at the NDIS 6.0 booth to learn more about what the NDIS 6.0 model has to offer. Have questions for us on how the model works? Leave us a comment in response to this posting.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Aarti Bharathan&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Program Manager, Core Networking&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=598167" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wndp/archive/tags/WinHEC/default.aspx">WinHEC</category><category domain="http://blogs.msdn.com/wndp/archive/tags/networking/default.aspx">networking</category><category domain="http://blogs.msdn.com/wndp/archive/tags/ndis/default.aspx">ndis</category></item><item><title>An Interview with Alireza Dabagh, NDIS development lead</title><link>http://blogs.msdn.com/wndp/archive/2006/04/17/Winhec-alid-interview.aspx</link><pubDate>Tue, 18 Apr 2006 04:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:577932</guid><dc:creator>wndpteam</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/wndp/comments/577932.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wndp/commentrss.aspx?PostID=577932</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Tell us about what you do in Windows.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;I’m NDIS development lead. I lead a team which works on NDIS and related components, and I also contribute to the architecture, coding and design of our components.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;How long have you been participating in WinHEC?&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Quite some time! Maybe 4 or 5 years.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;What are the challenges and opportunities you see ahead for core networking and the connectivity technologies that you work on?&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;One of the biggest challenges that we have is supporting multigigabit networking. As the raw bandwidth increases, the role of the entire stack becomes an obstacle to taking advantage of that bandwidth. It wasn’t an issue at 10/100Mbps, but it used to be an issue at 1Gbps. Today it’s not an issue anymore for 1Gbps but its an issue for 10Gbps. The challenge is to make sure we can take advantage of all the capacity that the network has to offer.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;The other challenge is manageability and diagnosability. In today’s environment, many of the people who rely on networking are new to networking and they need a way to understand what’s going on, why connectivity is lost,or why performance isn’t what they expect, in a way that they can act on rather than through some cryptic error message. They need clearer explanations of these problems. For example, if you lose Internet connectivity at home, it’s hard to tell if it’s because your cable is disconnected, or if your cable or DSL modem is hung, or because your router needs to be reset, or because your provider isn’t giving you an address. It’s really hard for a regular user to diagnose these problems.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;The third thing I’d mention is scalability. By that I mean being able to use multiple links, with features link load-balancing and fail-over. Today we have multiple solutions from various vendors, which behave in different ways and are often hard to use and managed. We’ve heard a lot of requests for supporting these features natively as part of the platform to provide a consistent experience.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;How does virtualization affect the area that you work on?&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;I should have mentioned that as one of the challenges! When you only have one real interface in the system, but you want each guest OS to see its own virtual interface, you run into various issues. For example, how do you get the real NIC to receive packets for all the virtual interfaces? Today each NIC has one unicast MAC address. If you want to get frames for all those virtual MAC addresses, today you have to put the hardware into promiscuous mode which has its own implications. Dispatching those incoming packets to multiple virtual machines has its own performance and security implications. Having resources like DMA engines, I/OAT engines and being able to use it in multiple virtual machines is also challenging particularly with security. It’s challenging to take advantage of offloads like TCP chimney offload and task offload in virtual machines without any conflicts. Remember that you can only have one driver running the hardware, and that driver is ignorant of there being multiple virtual interfaces running over it. So you need a layer that manages virtualization requirements on top of the driver.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Any messages for the WinHEC audience?&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;Be sure to follow the progress of our NDIS APIs closely, particularly what we’re doing with IPsec offload, TCP chimney offload and task offload. We don’t want anyone to be left behind, so the WinHEC attendees should make sure they can take advantage of that. It’s no longer enough to just provide plain vanilla hardware, because competitors can provide these cool new capabilities with minimal expense. Networking hardware that doesn’t offer these capabilities will be at a great disadvantage. Getting this functionality isn’t the difference between $10 and $100 hardware for OEMs; it’s the difference between $10 and $12 hardware. So my advice is: don’t be left behind!&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Verdana size=2&gt;-&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Abolade Gbadegesin&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=577932" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wndp/archive/tags/WinHEC/default.aspx">WinHEC</category><category domain="http://blogs.msdn.com/wndp/archive/tags/networking/default.aspx">networking</category><category domain="http://blogs.msdn.com/wndp/archive/tags/ndis/default.aspx">ndis</category><category domain="http://blogs.msdn.com/wndp/archive/tags/offload/default.aspx">offload</category><category domain="http://blogs.msdn.com/wndp/archive/tags/virtualization/default.aspx">virtualization</category></item></channel></rss>