<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:m="http://schemas.microsoft.com/office/2004/12/omml" 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 14 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Verdana;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        font-size:10.5pt;
        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;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.5pt;
        font-family:"Calibri","sans-serif";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        font-size:8.0pt;
        font-family:"Calibri","sans-serif";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        text-indent:21.0pt;
        font-size:10.5pt;
        font-family:"Calibri","sans-serif";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri","sans-serif";}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
/* Page Definitions */
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1929652149;
        mso-list-type:hybrid;
        mso-list-template-ids:-2029847614 -1409515110 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:18.0pt;
        text-indent:-18.0pt;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-text:"%2\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:42.0pt;
        text-indent:-21.0pt;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:63.0pt;
        text-indent:-21.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:84.0pt;
        text-indent:-21.0pt;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-text:"%5\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:105.0pt;
        text-indent:-21.0pt;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:126.0pt;
        text-indent:-21.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:147.0pt;
        text-indent:-21.0pt;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-text:"%8\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:168.0pt;
        text-indent:-21.0pt;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:189.0pt;
        text-indent:-21.0pt;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></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="ZH-CN" link="blue" vlink="purple" style="text-justify-trim:punctuation">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US">Hi friends of Libnl organization:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">I am a Watchguard employee and quite new to Libnl framework. In about Jan 5<sup>th</sup> we upgraded to the new version 3.2.16 . The new version is good ,but we found we cannot add the IPV6 address in the new version.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="font-size:11.0pt">Function "rtnl_link_name2i" in this version always return integer value
</span><b><span lang="EN-US" style="font-size:12.0pt;color:#00B050">0</span></b><span lang="EN-US" style="font-size:11.0pt;color:#00B050">
</span><span lang="EN-US" style="font-size:11.0pt">which means it fails to get a valid interface index from cache. I also tried the newest version 3.2.20, it has the same problem.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">I copied the function of our company in which it called Libnl function to add IPV6 address. It works well in the past version before 3.2.16, but it failed in the line which is drawn as
<span style="color:#00B050">green </span>after it.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">/* This adds single address to interface */<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">int wgnet_add_addr(const char * ifname,struct if_addr * ip) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    struct nl_cache *link_cache = NULL;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    struct nl_addr   *n_addr = NULL;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    struct rtnl_addr *r_addr = NULL;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    int ifindex;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    int ret=-1;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    if (!ip || !ifname) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">        return EINVAL;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    if (!handle && (ret=wgnet_init()) != 0 ) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">        return ret;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    rtnl_link_alloc_cache(handle,ip->ipaddr.sa_family,&link_cache);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    r_addr = rtnl_addr_alloc();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    /* FIXME we can use local version at some point */<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    n_addr=nl_addr_alloc(sizeof(ip->ipaddr.ip6));<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    if (!link_cache || !r_addr || !n_addr) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">        ret   = ENOMEM;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">        goto error;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    }<o:p></o:p></span></p>
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:12.0pt;color:#00B050"><o:p> </o:p></span></b></p>
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:12.0pt;color:#00B050">    ifindex = rtnl_link_name2i(link_cache, ifname);<o:p></o:p></span></b></p>
<p class="MsoNormal"><span lang="EN-US">    if (!ifindex) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">        ret   = ENOENT;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">        goto error;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    /* Copy data from provided data */<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    nl_addr_set_family(n_addr,ip->ipaddr.sa_family);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    nl_addr_set_binary_addr(n_addr,ip->ipaddr.addr,ip->ipaddr.sa_family==AF_INET ? sizeof(ip->ipaddr.ip): sizeof(ip->ipaddr.ip6)) ;
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    nl_addr_set_prefixlen(n_addr,ip->ipaddr.prefix);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    /* set netlink message and sent it out */<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    rtnl_addr_set_local(r_addr,n_addr);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    rtnl_addr_set_ifindex(r_addr, ifindex);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    if ( ip->scope ) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">        rtnl_addr_set_scope(r_addr,ip->scope);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    } <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    if ( ip->flags ) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">        rtnl_addr_set_flags(r_addr,ip->flags);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    ret=rtnl_addr_add(handle, r_addr, 0);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">error:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    *****<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    return ret;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">I compared the source code of the past version 3.2.13 and the current version 3.2.16 , and found there are the following modification in function “rtnl_link_get_by_name” which “rtnl_link_name2i” calls. 
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><img width="1146" height="514" id="Picture_x0020_1" src="cid:image001.png@01CDFCEF.21316140"></span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Then I comment this new-added code and build the newlibnl* .so files, and use them again. Then the IPV6 address could be added rightly like before.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">I think there should have some reasons why the new code is added, but I can’t understand more. So I ask help from you and expect to make it more clear.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">My questions is :<o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left:18.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1">
<![if !supportLists]><span lang="EN-US"><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span lang="EN-US">Does my change of rolling back this line reasonable? Will it affect other fiends?<o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left:18.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1">
<![if !supportLists]><span lang="EN-US"><span style="mso-list:Ignore">2.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span lang="EN-US">If my change is not reasonable, is it possible to change Watchguard code to adapt the new version of Libnl. My current purpose is to let the adding of IPV6 address work rightly.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Thanks again for your time to read my long Email. Expecting for any comments!<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:8.0pt;font-family:"Verdana","sans-serif";color:#1F497D">Thanks & Regards!<o:p></o:p></span></b></p>
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:8.0pt;font-family:"Verdana","sans-serif";color:#1F497D">YuTong Wang<o:p></o:p></span></b></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
</div>
</body>
</html>