#include <linux/ktime.h>
#include <linux/moduleparam.h>
#include <linux/uaccess.h>
+#include <linux/inetdevice.h>
#include <lnet/lib-lnet.h>
}
static char *
+get_first_intf(void)
+{
+ struct net_device *dev;
+
+ rtnl_lock();
+
+ for_each_netdev(&init_net, dev) {
+ struct in_device *in_dev;
+ if (strcmp(dev->name, "lo") == 0) /* skip the loopback IF */
+ continue;
+
+ if (!(dev_get_flags(dev) & IFF_UP)) {
+ CWARN("Ignoring interface %s (down)\n", dev->name);
+ continue;
+ }
+
+ in_dev = __in_dev_get_rtnl(dev);
+ if (!in_dev) {
+ CWARN("Interface %s has no IPv4 status.\n", dev->name);
+ continue;
+ }
+
+ rtnl_unlock();
+ return dev->name;
+ }
+
+ rtnl_unlock();
+ return NULL;
+}
+
+static char *
lnet_get_networks(void)
{
- char *nets;
- int rc;
+ static char network[LNET_MAX_STR_LEN];
+ char *nets, *intf;
+ int rc;
if (*networks != 0 && *ip2nets != 0) {
LCONSOLE_ERROR_MSG(0x101, "Please specify EITHER 'networks' or "
if (*networks != 0)
return networks;
- return "tcp";
+ intf = get_first_intf();
+ if (!intf)
+ return NULL;
+
+ snprintf(network, sizeof(network), "tcp(%s)", intf);
+
+ return network;
}
static void
CDEBUG(D_NET, "My pid is: %x\n", pid);
/* We're not passing any limits yet... */
- rc = LNetNIInit(pid);
- if (rc < 0) {
- CDEBUG (D_NET, "Can't init network interface: %d\n", rc);
+ rc = LNetNIInit(pid);
+ if (rc < 0) {
+ CDEBUG(D_NET, "Can't init network interface: %d\n", rc);
return rc;
}
return 0;
CERROR ("Failed to allocate event queue: %d\n", rc);
- LNetNIFini();
+
+ LNetNIFini();
return rc;
}
return 0;
}
-
int jt_ptl_network(int argc, char **argv)
{
struct libcfs_ioctl_data data;
} else if (!strcmp(argv[1], "configure") || !strcmp(argv[1], "up")) {
LIBCFS_IOC_INIT(data);
rc = l_ioctl(LNET_DEV_ID, IOC_LIBCFS_CONFIGURE, &data);
-
if (rc == 0) {
printf("LNET configured\n");
return 0;