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 ---