libcxgbi.c (2721745501a26d0dc3b88c0d2f3aa11471891388) | libcxgbi.c (a58b61e5b79bc9ce5f8d7b0cd03e8c6525c657f8) |
---|---|
1/* 2 * libcxgbi.c: Chelsio common library for T3/T4 iSCSI driver. 3 * 4 * Copyright (c) 2010 Chelsio Communications, Inc. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation. --- 458 unchanged lines hidden (view full) --- 467 468static struct cxgbi_sock *cxgbi_check_route(struct sockaddr *dst_addr) 469{ 470 struct sockaddr_in *daddr = (struct sockaddr_in *)dst_addr; 471 struct dst_entry *dst; 472 struct net_device *ndev; 473 struct cxgbi_device *cdev; 474 struct rtable *rt = NULL; | 1/* 2 * libcxgbi.c: Chelsio common library for T3/T4 iSCSI driver. 3 * 4 * Copyright (c) 2010 Chelsio Communications, Inc. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation. --- 458 unchanged lines hidden (view full) --- 467 468static struct cxgbi_sock *cxgbi_check_route(struct sockaddr *dst_addr) 469{ 470 struct sockaddr_in *daddr = (struct sockaddr_in *)dst_addr; 471 struct dst_entry *dst; 472 struct net_device *ndev; 473 struct cxgbi_device *cdev; 474 struct rtable *rt = NULL; |
475 struct neighbour *n; |
|
475 struct flowi4 fl4; 476 struct cxgbi_sock *csk = NULL; 477 unsigned int mtu = 0; 478 int port = 0xFFFF; 479 int err = 0; 480 481 if (daddr->sin_family != AF_INET) { 482 pr_info("address family 0x%x NOT supported.\n", --- 5 unchanged lines hidden (view full) --- 488 rt = find_route_ipv4(&fl4, 0, daddr->sin_addr.s_addr, 0, daddr->sin_port, 0); 489 if (!rt) { 490 pr_info("no route to ipv4 0x%x, port %u.\n", 491 daddr->sin_addr.s_addr, daddr->sin_port); 492 err = -ENETUNREACH; 493 goto err_out; 494 } 495 dst = &rt->dst; | 476 struct flowi4 fl4; 477 struct cxgbi_sock *csk = NULL; 478 unsigned int mtu = 0; 479 int port = 0xFFFF; 480 int err = 0; 481 482 if (daddr->sin_family != AF_INET) { 483 pr_info("address family 0x%x NOT supported.\n", --- 5 unchanged lines hidden (view full) --- 489 rt = find_route_ipv4(&fl4, 0, daddr->sin_addr.s_addr, 0, daddr->sin_port, 0); 490 if (!rt) { 491 pr_info("no route to ipv4 0x%x, port %u.\n", 492 daddr->sin_addr.s_addr, daddr->sin_port); 493 err = -ENETUNREACH; 494 goto err_out; 495 } 496 dst = &rt->dst; |
496 ndev = dst_get_neighbour_noref(dst)->dev; | 497 n = dst_get_neighbour_noref(dst); 498 if (!n) { 499 err = -ENODEV; 500 goto rel_rt; 501 } 502 ndev = n->dev; |
497 498 if (rt->rt_flags & (RTCF_MULTICAST | RTCF_BROADCAST)) { 499 pr_info("multi-cast route %pI4, port %u, dev %s.\n", 500 &daddr->sin_addr.s_addr, ntohs(daddr->sin_port), 501 ndev->name); 502 err = -ENETUNREACH; 503 goto rel_rt; 504 } 505 506 if (ndev->flags & IFF_LOOPBACK) { 507 ndev = ip_dev_find(&init_net, daddr->sin_addr.s_addr); 508 mtu = ndev->mtu; 509 pr_info("rt dev %s, loopback -> %s, mtu %u.\n", | 503 504 if (rt->rt_flags & (RTCF_MULTICAST | RTCF_BROADCAST)) { 505 pr_info("multi-cast route %pI4, port %u, dev %s.\n", 506 &daddr->sin_addr.s_addr, ntohs(daddr->sin_port), 507 ndev->name); 508 err = -ENETUNREACH; 509 goto rel_rt; 510 } 511 512 if (ndev->flags & IFF_LOOPBACK) { 513 ndev = ip_dev_find(&init_net, daddr->sin_addr.s_addr); 514 mtu = ndev->mtu; 515 pr_info("rt dev %s, loopback -> %s, mtu %u.\n", |
510 dst_get_neighbour_noref(dst)->dev->name, ndev->name, mtu); | 516 n->dev->name, ndev->name, mtu); |
511 } 512 513 cdev = cxgbi_device_find_by_netdev(ndev, &port); 514 if (!cdev) { 515 pr_info("dst %pI4, %s, NOT cxgbi device.\n", 516 &daddr->sin_addr.s_addr, ndev->name); 517 err = -ENETUNREACH; 518 goto rel_rt; --- 2130 unchanged lines hidden --- | 517 } 518 519 cdev = cxgbi_device_find_by_netdev(ndev, &port); 520 if (!cdev) { 521 pr_info("dst %pI4, %s, NOT cxgbi device.\n", 522 &daddr->sin_addr.s_addr, ndev->name); 523 err = -ENETUNREACH; 524 goto rel_rt; --- 2130 unchanged lines hidden --- |