<div dir="ltr"><div>On Tue, Jun 13, 2017 at 11:47:45PM +0300, Dmitry V. Levin wrote:</div><div>> On Tue, Jun 13, 2017 at 10:13:24PM +0800, JingPiao Chen wrote:</div><div>[...]</div><div>> > +#ifdef AF_SMC</div><div>> > +static bool</div><div>> > +decode_smc_diag_req(struct tcb *const tcp,</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">         </span>    const struct nlmsghdr *const nlmsghdr,</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">                </span>    const kernel_ulong_t addr,</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">            </span>    const kernel_ulong_t len)</div><div>> > +{</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>struct smc_diag_req req;</div><div>> > +</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>if (len < sizeof(req) || umove(tcp, addr, &req))</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">             </span>return false;</div><div>> > +</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">     </span>tprints("{diag_family=");</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre"> </span>printxval(addrfams, req.diag_family, "AF_???");</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">   </span>tprints(", diag_ext=");</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">   </span>printflags(smc_diag_extended_flags, req.diag_ext,</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">           </span>   "1<<(SMC_DIAG_\?\?\?-1)");</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">      </span>tprints(", id=");</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre"> </span>/*</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">  </span> * AF_SMC protocol family socket handler</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">    </span> * keeping the AF_INET sock address.</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">        </span> */</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre"> </span>print_inet_diag_sockid(&<a href="http://req.id">req.id</a>, AF_INET);</div><div>> </div><div>> Is it correct?  Does the kernel treat <a href="http://smc_diag_req.id">smc_diag_req.id</a> as AF_INET, AF_INET6,</div><div>> or something else?</div><div>> </div><div><br></div><div>The comment exist in net/smc/af_smc.c: 4</div><div> *  AF_SMC protocol family socket handler keeping the AF_INET sock address type</div><div> *  applies to SOCK_STREAM sockets only</div><div><br></div><div>net/smc/smc_diag.c:</div><div>static void smc_diag_msg_common_fill(struct smc_diag_msg *r, struct sock *sk)</div><div>{</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>struct smc_sock *smc = smc_sk(sk);</div><div><br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>r->diag_family = sk->sk_family;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>if (!smc->clcsock)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">          </span>return;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>r->id.idiag_sport = htons(smc->clcsock->sk->sk_num);</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>r->id.idiag_dport = smc->clcsock->sk->sk_dport;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>r->id.idiag_if = smc->clcsock->sk->sk_bound_dev_if;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>sock_diag_save_cookie(sk, r->id.idiag_cookie);</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>memset(&r->id.idiag_src, 0, sizeof(r->id.idiag_src));</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>memset(&r->id.idiag_dst, 0, sizeof(r->id.idiag_dst));</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>r->id.idiag_src[0] = smc->clcsock->sk->sk_rcv_saddr;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>r->id.idiag_dst[0] = smc->clcsock->sk->sk_daddr;</div><div>}</div><div><br></div><div>net/ipv4/inet_diag.c:</div><div>void inet_diag_msg_common_fill(struct inet_diag_msg *r, struct sock *sk)</div><div>{</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>r->idiag_family = sk->sk_family;</div><div><br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>r->id.idiag_sport = htons(sk->sk_num);</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>r->id.idiag_dport = sk->sk_dport;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>r->id.idiag_if = sk->sk_bound_dev_if;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>sock_diag_save_cookie(sk, r->id.idiag_cookie);</div><div><br></div><div>#if IS_ENABLED(CONFIG_IPV6)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>if (sk->sk_family == AF_INET6) {</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">            </span>*(struct in6_addr *)r->id.idiag_src = sk->sk_v6_rcv_saddr;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">               </span>*(struct in6_addr *)r->id.idiag_dst = sk->sk_v6_daddr;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>} else</div><div>#endif</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>{</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>memset(&r->id.idiag_src, 0, sizeof(r->id.idiag_src));</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>memset(&r->id.idiag_dst, 0, sizeof(r->id.idiag_dst));</div><div><br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>r->id.idiag_src[0] = sk->sk_rcv_saddr;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>r->id.idiag_dst[0] = sk->sk_daddr;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>}</div><div>}</div><div><br></div><div>--</div><div>JingPiao Chen</div></div>