From: ericm Date: Wed, 12 Nov 2003 11:03:26 +0000 (+0000) Subject: merge b_devel to b_eq: 20031112 X-Git-Tag: v1_7_0_51~2^9~177 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=551c0f335c2bd4773b724991c32e6c4933bbc123;p=fs%2Flustre-release.git merge b_devel to b_eq: 20031112 for robert's final zeroconf code. --- diff --git a/lnet/build.m4 b/lnet/build.m4 index 025f243..8c55b20 100644 --- a/lnet/build.m4 +++ b/lnet/build.m4 @@ -16,6 +16,9 @@ bindir='${exec_prefix}/usr/bin' sbindir='${exec_prefix}/usr/sbin' includedir='${prefix}/usr/include' +rootsbindir='${exec_prefix}/sbin' +AC_SUBST(rootsbindir) + # Directories for documentation and demos. docdir='${prefix}/usr/share/doc/$(PACKAGE)' AC_SUBST(docdir) diff --git a/lnet/configure.in b/lnet/configure.in index 31d3492..44657e0 100644 --- a/lnet/configure.in +++ b/lnet/configure.in @@ -29,6 +29,6 @@ AM_CONFIG_HEADER(include/config.h) AC_OUTPUT([Makefile Kernelenv libcfs/Makefile portals/Makefile \ unals/Makefile knals/Makefile router/Makefile \ knals/socknal/Makefile knals/gmnal/Makefile knals/qswnal/Makefile \ - knals/scimacnal/Makefile knals/toenal/Makefile \ + knals/scimacnal/Makefile knals/toenal/Makefile knals/ibnal/Makefile\ utils/Makefile tests/Makefile doc/Makefile ]) diff --git a/lnet/include/linux/kp30.h b/lnet/include/linux/kp30.h index 344cf28..0acec81 100644 --- a/lnet/include/linux/kp30.h +++ b/lnet/include/linux/kp30.h @@ -778,6 +778,7 @@ struct portals_cfg { __u32 pcfg_nal; __u32 pcfg_flags; + __u32 pcfg_gw_nal; __u64 pcfg_nid; __u64 pcfg_nid2; __u64 pcfg_nid3; diff --git a/lnet/include/lnet/lnetctl.h b/lnet/include/lnet/lnetctl.h index 0466494..a9942aa 100644 --- a/lnet/include/lnet/lnetctl.h +++ b/lnet/include/lnet/lnetctl.h @@ -29,6 +29,7 @@ #define OBD_DEV_PATH "/dev/obd" int ptl_name2nal(char *str); +int ptl_parse_ipaddr (__u32 *ipaddrp, char *str); int ptl_parse_nid (ptl_nid_t *nidp, char *str); char * ptl_nid2str (char *buffer, ptl_nid_t nid); diff --git a/lnet/include/lnet/ptlctl.h b/lnet/include/lnet/ptlctl.h index 0466494..a9942aa 100644 --- a/lnet/include/lnet/ptlctl.h +++ b/lnet/include/lnet/ptlctl.h @@ -29,6 +29,7 @@ #define OBD_DEV_PATH "/dev/obd" int ptl_name2nal(char *str); +int ptl_parse_ipaddr (__u32 *ipaddrp, char *str); int ptl_parse_nid (ptl_nid_t *nidp, char *str); char * ptl_nid2str (char *buffer, ptl_nid_t nid); diff --git a/lnet/klnds/socklnd/socklnd.h b/lnet/klnds/socklnd/socklnd.h index 8c906e2..227a24f 100644 --- a/lnet/klnds/socklnd/socklnd.h +++ b/lnet/klnds/socklnd/socklnd.h @@ -82,12 +82,6 @@ #define SOCKNAL_PEER_HASH_SIZE 101 /* # peer lists */ -#if PTL_LARGE_MTU -# define SOCKNAL_MAX_FWD_PAYLOAD (256<<10) /* biggest payload I can forward */ -#else -# define SOCKNAL_MAX_FWD_PAYLOAD (64<<10) /* biggest payload I can forward */ -#endif - #define SOCKNAL_NLTXS 128 /* # normal transmit messages */ #define SOCKNAL_NNBLK_LTXS 128 /* # transmit messages reserved if can't block */ @@ -96,7 +90,7 @@ #define SOCKNAL_SMALL_FWD_PAGES 1 /* # pages in a small message fwd buffer */ -#define SOCKNAL_LARGE_FWD_PAGES (PAGE_ALIGN (sizeof (ptl_hdr_t) + SOCKNAL_MAX_FWD_PAYLOAD) >> PAGE_SHIFT) +#define SOCKNAL_LARGE_FWD_PAGES (PAGE_ALIGN (sizeof (ptl_hdr_t) + PTL_MTU) >> PAGE_SHIFT) /* # pages in a large message fwd buffer */ #define SOCKNAL_RESCHED 100 /* # scheduler loops before reschedule */ diff --git a/lnet/klnds/socklnd/socklnd_cb.c b/lnet/klnds/socklnd/socklnd_cb.c index 346d60e..6cd4e73 100644 --- a/lnet/klnds/socklnd/socklnd_cb.c +++ b/lnet/klnds/socklnd/socklnd_cb.c @@ -1406,37 +1406,43 @@ ksocknal_fwd_parse (ksock_conn_t *conn) { ksock_peer_t *peer; ptl_nid_t dest_nid = NTOH__u64 (conn->ksnc_hdr.dest_nid); + ptl_nid_t src_nid = NTOH__u64 (conn->ksnc_hdr.src_nid); int body_len = NTOH__u32 (conn->ksnc_hdr.payload_length); + char str[PTL_NALFMT_SIZE]; CDEBUG (D_NET, "%p "LPX64"->"LPX64" %d parsing header\n", conn, - NTOH__u64 (conn->ksnc_hdr.src_nid), - dest_nid, conn->ksnc_rx_nob_left); + src_nid, dest_nid, conn->ksnc_rx_nob_left); LASSERT (conn->ksnc_rx_state == SOCKNAL_RX_HEADER); LASSERT (conn->ksnc_rx_scheduled); if (body_len < 0) { /* length corrupt (overflow) */ - CERROR("dropping packet from "LPX64" for "LPX64": packet " - "size %d illegal\n", NTOH__u64 (conn->ksnc_hdr.src_nid), - dest_nid, body_len); + CERROR("dropping packet from "LPX64" (%s) for "LPX64" (%s): " + "packet size %d illegal\n", + src_nid, portals_nid2str(TCPNAL, src_nid, str), + dest_nid, portals_nid2str(TCPNAL, dest_nid, str), + body_len); ksocknal_new_packet (conn, 0); /* on to new packet */ return; } if (ksocknal_data.ksnd_fmbs == NULL) { /* not forwarding */ - CERROR("dropping packet from "LPX64" for "LPX64": not " - "forwarding\n", conn->ksnc_hdr.src_nid, - conn->ksnc_hdr.dest_nid); + CERROR("dropping packet from "LPX64" (%s) for "LPX64 + " (%s): not forwarding\n", + src_nid, portals_nid2str(TCPNAL, src_nid, str), + dest_nid, portals_nid2str(TCPNAL, dest_nid, str)); /* on to new packet (skip this one's body) */ ksocknal_new_packet (conn, body_len); return; } - if (body_len > SOCKNAL_MAX_FWD_PAYLOAD) { /* too big to forward */ - CERROR ("dropping packet from "LPX64" for "LPX64 - ": packet size %d too big\n", conn->ksnc_hdr.src_nid, - conn->ksnc_hdr.dest_nid, body_len); + if (body_len > PTL_MTU) { /* too big to forward */ + CERROR ("dropping packet from "LPX64" (%s) for "LPX64 + "(%s): packet size %d too big\n", + src_nid, portals_nid2str(TCPNAL, src_nid, str), + dest_nid, portals_nid2str(TCPNAL, dest_nid, str), + body_len); /* on to new packet (skip this one's body) */ ksocknal_new_packet (conn, body_len); return; @@ -1445,9 +1451,10 @@ ksocknal_fwd_parse (ksock_conn_t *conn) /* should have gone direct */ peer = ksocknal_get_peer (conn->ksnc_hdr.dest_nid); if (peer != NULL) { - CERROR ("dropping packet from "LPX64" for "LPX64 - ": target is a peer\n", conn->ksnc_hdr.src_nid, - conn->ksnc_hdr.dest_nid); + CERROR ("dropping packet from "LPX64" (%s) for "LPX64 + "(%s): target is a peer\n", + src_nid, portals_nid2str(TCPNAL, src_nid, str), + dest_nid, portals_nid2str(TCPNAL, dest_nid, str)); ksocknal_put_peer (peer); /* drop ref from get above */ /* on to next packet (skip this one's body) */ diff --git a/lnet/klnds/toelnd/toenal.h b/lnet/klnds/toelnd/toenal.h index 3654848..b211d6c 100644 --- a/lnet/klnds/toelnd/toenal.h +++ b/lnet/klnds/toelnd/toenal.h @@ -60,8 +60,6 @@ #include #include -#define SOCKNAL_MAX_FWD_PAYLOAD (64<<10) /* biggest payload I can forward */ - #define SOCKNAL_NLTXS 128 /* # normal transmit messages */ #define SOCKNAL_NNBLK_LTXS 128 /* # transmit messages reserved if can't block */ @@ -70,7 +68,7 @@ #define SOCKNAL_SMALL_FWD_PAGES 1 /* # pages in a small message fwd buffer */ -#define SOCKNAL_LARGE_FWD_PAGES (PAGE_ALIGN (sizeof (ptl_hdr_t) + SOCKNAL_MAX_FWD_PAYLOAD) >> PAGE_SHIFT) +#define SOCKNAL_LARGE_FWD_PAGES (PAGE_ALIGN (sizeof (ptl_hdr_t) + PTL_MTU) >> PAGE_SHIFT) /* # pages in a large message fwd buffer */ #define SOCKNAL_RESCHED 100 /* # scheduler loops before reschedule */ diff --git a/lnet/klnds/toelnd/toenal_cb.c b/lnet/klnds/toelnd/toenal_cb.c index 37e3f1e..f7fa794 100644 --- a/lnet/klnds/toelnd/toenal_cb.c +++ b/lnet/klnds/toelnd/toenal_cb.c @@ -718,7 +718,7 @@ ktoenal_fwd_parse (ksock_conn_t *conn) return; } - if (body_len > SOCKNAL_MAX_FWD_PAYLOAD) /* too big to forward */ + if (body_len > PTL_MTU) /* too big to forward */ { CERROR ("dropping packet from "LPX64" for "LPX64": packet size %d too big\n", conn->ksnc_hdr.src_nid, conn->ksnc_hdr.dest_nid, body_len); diff --git a/lnet/libcfs/module.c b/lnet/libcfs/module.c index 930920b..a01dfe2 100644 --- a/lnet/libcfs/module.c +++ b/lnet/libcfs/module.c @@ -225,13 +225,13 @@ kportal_router_cmd(struct portals_cfg *pcfg, void * private) CDEBUG(D_IOCTL, "Adding route: [%d] "LPU64" : "LPU64" - "LPU64"\n", pcfg->pcfg_nal, pcfg->pcfg_nid, pcfg->pcfg_nid2, pcfg->pcfg_nid3); - err = kportal_add_route(pcfg->pcfg_nal, pcfg->pcfg_nid, + err = kportal_add_route(pcfg->pcfg_gw_nal, pcfg->pcfg_nid, pcfg->pcfg_nid2, pcfg->pcfg_nid3); break; case NAL_CMD_DEL_ROUTE: CDEBUG (D_IOCTL, "Removing routes via [%d] "LPU64" : "LPU64" - "LPU64"\n", - pcfg->pcfg_nal, pcfg->pcfg_nid, + pcfg->pcfg_gw_nal, pcfg->pcfg_nid, pcfg->pcfg_nid2, pcfg->pcfg_nid3); err = kportal_del_route (pcfg->pcfg_nal, pcfg->pcfg_nid, pcfg->pcfg_nid2, pcfg->pcfg_nid3); @@ -239,7 +239,7 @@ kportal_router_cmd(struct portals_cfg *pcfg, void * private) case NAL_CMD_NOTIFY_ROUTER: { CDEBUG (D_IOCTL, "Notifying peer [%d] "LPU64" %s @ %ld\n", - pcfg->pcfg_nal, pcfg->pcfg_nid, + pcfg->pcfg_gw_nal, pcfg->pcfg_nid, pcfg->pcfg_flags ? "Enabling" : "Disabling", (time_t)pcfg->pcfg_nid3); @@ -251,7 +251,7 @@ kportal_router_cmd(struct portals_cfg *pcfg, void * private) case NAL_CMD_GET_ROUTE: CDEBUG (D_IOCTL, "Getting route [%d]\n", pcfg->pcfg_count); - err = kportal_get_route(pcfg->pcfg_count, &pcfg->pcfg_nal, + err = kportal_get_route(pcfg->pcfg_count, &pcfg->pcfg_gw_nal, &pcfg->pcfg_nid, &pcfg->pcfg_nid2, &pcfg->pcfg_nid3, &pcfg->pcfg_flags); @@ -260,38 +260,6 @@ kportal_router_cmd(struct portals_cfg *pcfg, void * private) RETURN(err); } -static int -kportal_register_router (void) -{ - int rc; - kpr_control_interface_t *ci; - - ci = (kpr_control_interface_t *)PORTAL_SYMBOL_GET(kpr_control_interface); - if (ci == NULL) - return (0); - - rc = kportal_nal_register(ROUTER, kportal_router_cmd, NULL); - - PORTAL_SYMBOL_PUT(kpr_control_interface); - return (rc); -} - -static int -kportal_unregister_router (void) -{ - int rc; - kpr_control_interface_t *ci; - - ci = (kpr_control_interface_t *)PORTAL_SYMBOL_GET(kpr_control_interface); - if (ci == NULL) - return (0); - - rc = kportal_nal_unregister(ROUTER); - - PORTAL_SYMBOL_PUT(kpr_control_interface); - return (rc); -} - int kportal_nal_cmd(struct portals_cfg *pcfg) { @@ -626,9 +594,9 @@ static int init_kportals_module(void) goto cleanup_fini; } - rc = kportal_register_router(); + rc = kportal_nal_register(ROUTER, kportal_router_cmd, NULL); if (rc) { - CERROR("kportals_register_router: error %d\n", rc); + CERROR("kportal_nal_registre: ROUTER error %d\n", rc); goto cleanup_proc; } @@ -654,7 +622,7 @@ static void exit_kportals_module(void) { int rc; - kportal_unregister_router(); + kportal_nal_unregister(ROUTER); remove_proc(); PtlFini(); diff --git a/lnet/utils/portals.c b/lnet/utils/portals.c index 91e817d..f191664 100644 --- a/lnet/utils/portals.c +++ b/lnet/utils/portals.c @@ -100,7 +100,8 @@ pcfg_ioctl(struct portals_cfg *pcfg) { int rc; - pcfg->pcfg_nal = g_nal; + if (pcfg->pcfg_nal ==0) + pcfg->pcfg_nal = g_nal; if (g_record_cb) { rc = g_record_cb(PORTALS_CFG_TYPE, sizeof(*pcfg), pcfg); @@ -1188,14 +1189,15 @@ jt_ptl_add_route (int argc, char **argv) PCFG_INIT(pcfg, NAL_CMD_ADD_ROUTE); pcfg.pcfg_nid = gateway_nid; - pcfg.pcfg_nal = g_nal; + pcfg.pcfg_nal = ROUTER; + pcfg.pcfg_gw_nal = g_nal; pcfg.pcfg_nid2 = MIN (nid1, nid2); pcfg.pcfg_nid3 = MAX (nid1, nid2); rc = pcfg_ioctl(&pcfg); if (rc != 0) { - fprintf (stderr, "IOC_PORTAL_ADD_ROUTE failed: %s\n", strerror (errno)); + fprintf (stderr, "NAL_CMD_ADD_ROUTE failed: %s\n", strerror (errno)); return (-1); } @@ -1250,7 +1252,8 @@ jt_ptl_del_route (int argc, char **argv) } PCFG_INIT(pcfg, NAL_CMD_DEL_ROUTE); - pcfg.pcfg_nal = g_nal; + pcfg.pcfg_nal = ROUTER; + pcfg.pcfg_gw_nal = g_nal; pcfg.pcfg_nid = nid; pcfg.pcfg_nid2 = nid1; pcfg.pcfg_nid3 = nid2; @@ -1258,7 +1261,7 @@ jt_ptl_del_route (int argc, char **argv) rc = pcfg_ioctl(&pcfg); if (rc != 0) { - fprintf (stderr, "IOC_PORTAL_DEL_ROUTE ("LPX64") failed: %s\n", nid, strerror (errno)); + fprintf (stderr, "NAL_CMD_DEL_ROUTE ("LPX64") failed: %s\n", nid, strerror (errno)); return (-1); } @@ -1309,7 +1312,8 @@ jt_ptl_notify_router (int argc, char **argv) } PCFG_INIT(pcfg, NAL_CMD_NOTIFY_ROUTER); - pcfg.pcfg_nal = g_nal; + pcfg.pcfg_nal = ROUTER; + pcfg.pcfg_gw_nal = g_nal; pcfg.pcfg_nid = nid; pcfg.pcfg_flags = enable; /* Yeuch; 'cept I need a __u64 on 64 bit machines... */ @@ -1318,7 +1322,7 @@ jt_ptl_notify_router (int argc, char **argv) rc = pcfg_ioctl(&pcfg); if (rc != 0) { - fprintf (stderr, "IOC_PORTAL_NOTIFY_ROUTER ("LPX64") failed: %s\n", + fprintf (stderr, "NAL_CMD_NOTIFY_ROUTER ("LPX64") failed: %s\n", nid, strerror (errno)); return (-1); } @@ -1342,13 +1346,14 @@ jt_ptl_print_routes (int argc, char **argv) for (index = 0;;index++) { PCFG_INIT(pcfg, NAL_CMD_GET_ROUTE); + pcfg.pcfg_nal = ROUTER; pcfg.pcfg_count = index; rc = pcfg_ioctl(&pcfg); if (rc != 0) break; - gateway_nal = pcfg.pcfg_nal; + gateway_nal = pcfg.pcfg_gw_nal; gateway_nid = pcfg.pcfg_nid; nid1 = pcfg.pcfg_nid2; nid2 = pcfg.pcfg_nid3; diff --git a/lustre/portals/build.m4 b/lustre/portals/build.m4 index 025f243..8c55b20 100644 --- a/lustre/portals/build.m4 +++ b/lustre/portals/build.m4 @@ -16,6 +16,9 @@ bindir='${exec_prefix}/usr/bin' sbindir='${exec_prefix}/usr/sbin' includedir='${prefix}/usr/include' +rootsbindir='${exec_prefix}/sbin' +AC_SUBST(rootsbindir) + # Directories for documentation and demos. docdir='${prefix}/usr/share/doc/$(PACKAGE)' AC_SUBST(docdir) diff --git a/lustre/portals/configure.in b/lustre/portals/configure.in index 31d3492..44657e0 100644 --- a/lustre/portals/configure.in +++ b/lustre/portals/configure.in @@ -29,6 +29,6 @@ AM_CONFIG_HEADER(include/config.h) AC_OUTPUT([Makefile Kernelenv libcfs/Makefile portals/Makefile \ unals/Makefile knals/Makefile router/Makefile \ knals/socknal/Makefile knals/gmnal/Makefile knals/qswnal/Makefile \ - knals/scimacnal/Makefile knals/toenal/Makefile \ + knals/scimacnal/Makefile knals/toenal/Makefile knals/ibnal/Makefile\ utils/Makefile tests/Makefile doc/Makefile ]) diff --git a/lustre/portals/include/linux/kp30.h b/lustre/portals/include/linux/kp30.h index 344cf28..0acec81 100644 --- a/lustre/portals/include/linux/kp30.h +++ b/lustre/portals/include/linux/kp30.h @@ -778,6 +778,7 @@ struct portals_cfg { __u32 pcfg_nal; __u32 pcfg_flags; + __u32 pcfg_gw_nal; __u64 pcfg_nid; __u64 pcfg_nid2; __u64 pcfg_nid3; diff --git a/lustre/portals/include/portals/ptlctl.h b/lustre/portals/include/portals/ptlctl.h index 0466494..a9942aa 100644 --- a/lustre/portals/include/portals/ptlctl.h +++ b/lustre/portals/include/portals/ptlctl.h @@ -29,6 +29,7 @@ #define OBD_DEV_PATH "/dev/obd" int ptl_name2nal(char *str); +int ptl_parse_ipaddr (__u32 *ipaddrp, char *str); int ptl_parse_nid (ptl_nid_t *nidp, char *str); char * ptl_nid2str (char *buffer, ptl_nid_t nid); diff --git a/lustre/portals/knals/socknal/socknal.h b/lustre/portals/knals/socknal/socknal.h index 8c906e2..227a24f 100644 --- a/lustre/portals/knals/socknal/socknal.h +++ b/lustre/portals/knals/socknal/socknal.h @@ -82,12 +82,6 @@ #define SOCKNAL_PEER_HASH_SIZE 101 /* # peer lists */ -#if PTL_LARGE_MTU -# define SOCKNAL_MAX_FWD_PAYLOAD (256<<10) /* biggest payload I can forward */ -#else -# define SOCKNAL_MAX_FWD_PAYLOAD (64<<10) /* biggest payload I can forward */ -#endif - #define SOCKNAL_NLTXS 128 /* # normal transmit messages */ #define SOCKNAL_NNBLK_LTXS 128 /* # transmit messages reserved if can't block */ @@ -96,7 +90,7 @@ #define SOCKNAL_SMALL_FWD_PAGES 1 /* # pages in a small message fwd buffer */ -#define SOCKNAL_LARGE_FWD_PAGES (PAGE_ALIGN (sizeof (ptl_hdr_t) + SOCKNAL_MAX_FWD_PAYLOAD) >> PAGE_SHIFT) +#define SOCKNAL_LARGE_FWD_PAGES (PAGE_ALIGN (sizeof (ptl_hdr_t) + PTL_MTU) >> PAGE_SHIFT) /* # pages in a large message fwd buffer */ #define SOCKNAL_RESCHED 100 /* # scheduler loops before reschedule */ diff --git a/lustre/portals/knals/socknal/socknal_cb.c b/lustre/portals/knals/socknal/socknal_cb.c index 346d60e..6cd4e73 100644 --- a/lustre/portals/knals/socknal/socknal_cb.c +++ b/lustre/portals/knals/socknal/socknal_cb.c @@ -1406,37 +1406,43 @@ ksocknal_fwd_parse (ksock_conn_t *conn) { ksock_peer_t *peer; ptl_nid_t dest_nid = NTOH__u64 (conn->ksnc_hdr.dest_nid); + ptl_nid_t src_nid = NTOH__u64 (conn->ksnc_hdr.src_nid); int body_len = NTOH__u32 (conn->ksnc_hdr.payload_length); + char str[PTL_NALFMT_SIZE]; CDEBUG (D_NET, "%p "LPX64"->"LPX64" %d parsing header\n", conn, - NTOH__u64 (conn->ksnc_hdr.src_nid), - dest_nid, conn->ksnc_rx_nob_left); + src_nid, dest_nid, conn->ksnc_rx_nob_left); LASSERT (conn->ksnc_rx_state == SOCKNAL_RX_HEADER); LASSERT (conn->ksnc_rx_scheduled); if (body_len < 0) { /* length corrupt (overflow) */ - CERROR("dropping packet from "LPX64" for "LPX64": packet " - "size %d illegal\n", NTOH__u64 (conn->ksnc_hdr.src_nid), - dest_nid, body_len); + CERROR("dropping packet from "LPX64" (%s) for "LPX64" (%s): " + "packet size %d illegal\n", + src_nid, portals_nid2str(TCPNAL, src_nid, str), + dest_nid, portals_nid2str(TCPNAL, dest_nid, str), + body_len); ksocknal_new_packet (conn, 0); /* on to new packet */ return; } if (ksocknal_data.ksnd_fmbs == NULL) { /* not forwarding */ - CERROR("dropping packet from "LPX64" for "LPX64": not " - "forwarding\n", conn->ksnc_hdr.src_nid, - conn->ksnc_hdr.dest_nid); + CERROR("dropping packet from "LPX64" (%s) for "LPX64 + " (%s): not forwarding\n", + src_nid, portals_nid2str(TCPNAL, src_nid, str), + dest_nid, portals_nid2str(TCPNAL, dest_nid, str)); /* on to new packet (skip this one's body) */ ksocknal_new_packet (conn, body_len); return; } - if (body_len > SOCKNAL_MAX_FWD_PAYLOAD) { /* too big to forward */ - CERROR ("dropping packet from "LPX64" for "LPX64 - ": packet size %d too big\n", conn->ksnc_hdr.src_nid, - conn->ksnc_hdr.dest_nid, body_len); + if (body_len > PTL_MTU) { /* too big to forward */ + CERROR ("dropping packet from "LPX64" (%s) for "LPX64 + "(%s): packet size %d too big\n", + src_nid, portals_nid2str(TCPNAL, src_nid, str), + dest_nid, portals_nid2str(TCPNAL, dest_nid, str), + body_len); /* on to new packet (skip this one's body) */ ksocknal_new_packet (conn, body_len); return; @@ -1445,9 +1451,10 @@ ksocknal_fwd_parse (ksock_conn_t *conn) /* should have gone direct */ peer = ksocknal_get_peer (conn->ksnc_hdr.dest_nid); if (peer != NULL) { - CERROR ("dropping packet from "LPX64" for "LPX64 - ": target is a peer\n", conn->ksnc_hdr.src_nid, - conn->ksnc_hdr.dest_nid); + CERROR ("dropping packet from "LPX64" (%s) for "LPX64 + "(%s): target is a peer\n", + src_nid, portals_nid2str(TCPNAL, src_nid, str), + dest_nid, portals_nid2str(TCPNAL, dest_nid, str)); ksocknal_put_peer (peer); /* drop ref from get above */ /* on to next packet (skip this one's body) */ diff --git a/lustre/portals/knals/toenal/toenal.h b/lustre/portals/knals/toenal/toenal.h index 3654848..b211d6c 100644 --- a/lustre/portals/knals/toenal/toenal.h +++ b/lustre/portals/knals/toenal/toenal.h @@ -60,8 +60,6 @@ #include #include -#define SOCKNAL_MAX_FWD_PAYLOAD (64<<10) /* biggest payload I can forward */ - #define SOCKNAL_NLTXS 128 /* # normal transmit messages */ #define SOCKNAL_NNBLK_LTXS 128 /* # transmit messages reserved if can't block */ @@ -70,7 +68,7 @@ #define SOCKNAL_SMALL_FWD_PAGES 1 /* # pages in a small message fwd buffer */ -#define SOCKNAL_LARGE_FWD_PAGES (PAGE_ALIGN (sizeof (ptl_hdr_t) + SOCKNAL_MAX_FWD_PAYLOAD) >> PAGE_SHIFT) +#define SOCKNAL_LARGE_FWD_PAGES (PAGE_ALIGN (sizeof (ptl_hdr_t) + PTL_MTU) >> PAGE_SHIFT) /* # pages in a large message fwd buffer */ #define SOCKNAL_RESCHED 100 /* # scheduler loops before reschedule */ diff --git a/lustre/portals/knals/toenal/toenal_cb.c b/lustre/portals/knals/toenal/toenal_cb.c index 37e3f1e..f7fa794 100644 --- a/lustre/portals/knals/toenal/toenal_cb.c +++ b/lustre/portals/knals/toenal/toenal_cb.c @@ -718,7 +718,7 @@ ktoenal_fwd_parse (ksock_conn_t *conn) return; } - if (body_len > SOCKNAL_MAX_FWD_PAYLOAD) /* too big to forward */ + if (body_len > PTL_MTU) /* too big to forward */ { CERROR ("dropping packet from "LPX64" for "LPX64": packet size %d too big\n", conn->ksnc_hdr.src_nid, conn->ksnc_hdr.dest_nid, body_len); diff --git a/lustre/portals/libcfs/module.c b/lustre/portals/libcfs/module.c index 930920b..a01dfe2 100644 --- a/lustre/portals/libcfs/module.c +++ b/lustre/portals/libcfs/module.c @@ -225,13 +225,13 @@ kportal_router_cmd(struct portals_cfg *pcfg, void * private) CDEBUG(D_IOCTL, "Adding route: [%d] "LPU64" : "LPU64" - "LPU64"\n", pcfg->pcfg_nal, pcfg->pcfg_nid, pcfg->pcfg_nid2, pcfg->pcfg_nid3); - err = kportal_add_route(pcfg->pcfg_nal, pcfg->pcfg_nid, + err = kportal_add_route(pcfg->pcfg_gw_nal, pcfg->pcfg_nid, pcfg->pcfg_nid2, pcfg->pcfg_nid3); break; case NAL_CMD_DEL_ROUTE: CDEBUG (D_IOCTL, "Removing routes via [%d] "LPU64" : "LPU64" - "LPU64"\n", - pcfg->pcfg_nal, pcfg->pcfg_nid, + pcfg->pcfg_gw_nal, pcfg->pcfg_nid, pcfg->pcfg_nid2, pcfg->pcfg_nid3); err = kportal_del_route (pcfg->pcfg_nal, pcfg->pcfg_nid, pcfg->pcfg_nid2, pcfg->pcfg_nid3); @@ -239,7 +239,7 @@ kportal_router_cmd(struct portals_cfg *pcfg, void * private) case NAL_CMD_NOTIFY_ROUTER: { CDEBUG (D_IOCTL, "Notifying peer [%d] "LPU64" %s @ %ld\n", - pcfg->pcfg_nal, pcfg->pcfg_nid, + pcfg->pcfg_gw_nal, pcfg->pcfg_nid, pcfg->pcfg_flags ? "Enabling" : "Disabling", (time_t)pcfg->pcfg_nid3); @@ -251,7 +251,7 @@ kportal_router_cmd(struct portals_cfg *pcfg, void * private) case NAL_CMD_GET_ROUTE: CDEBUG (D_IOCTL, "Getting route [%d]\n", pcfg->pcfg_count); - err = kportal_get_route(pcfg->pcfg_count, &pcfg->pcfg_nal, + err = kportal_get_route(pcfg->pcfg_count, &pcfg->pcfg_gw_nal, &pcfg->pcfg_nid, &pcfg->pcfg_nid2, &pcfg->pcfg_nid3, &pcfg->pcfg_flags); @@ -260,38 +260,6 @@ kportal_router_cmd(struct portals_cfg *pcfg, void * private) RETURN(err); } -static int -kportal_register_router (void) -{ - int rc; - kpr_control_interface_t *ci; - - ci = (kpr_control_interface_t *)PORTAL_SYMBOL_GET(kpr_control_interface); - if (ci == NULL) - return (0); - - rc = kportal_nal_register(ROUTER, kportal_router_cmd, NULL); - - PORTAL_SYMBOL_PUT(kpr_control_interface); - return (rc); -} - -static int -kportal_unregister_router (void) -{ - int rc; - kpr_control_interface_t *ci; - - ci = (kpr_control_interface_t *)PORTAL_SYMBOL_GET(kpr_control_interface); - if (ci == NULL) - return (0); - - rc = kportal_nal_unregister(ROUTER); - - PORTAL_SYMBOL_PUT(kpr_control_interface); - return (rc); -} - int kportal_nal_cmd(struct portals_cfg *pcfg) { @@ -626,9 +594,9 @@ static int init_kportals_module(void) goto cleanup_fini; } - rc = kportal_register_router(); + rc = kportal_nal_register(ROUTER, kportal_router_cmd, NULL); if (rc) { - CERROR("kportals_register_router: error %d\n", rc); + CERROR("kportal_nal_registre: ROUTER error %d\n", rc); goto cleanup_proc; } @@ -654,7 +622,7 @@ static void exit_kportals_module(void) { int rc; - kportal_unregister_router(); + kportal_nal_unregister(ROUTER); remove_proc(); PtlFini(); diff --git a/lustre/portals/utils/portals.c b/lustre/portals/utils/portals.c index 91e817d..f191664 100644 --- a/lustre/portals/utils/portals.c +++ b/lustre/portals/utils/portals.c @@ -100,7 +100,8 @@ pcfg_ioctl(struct portals_cfg *pcfg) { int rc; - pcfg->pcfg_nal = g_nal; + if (pcfg->pcfg_nal ==0) + pcfg->pcfg_nal = g_nal; if (g_record_cb) { rc = g_record_cb(PORTALS_CFG_TYPE, sizeof(*pcfg), pcfg); @@ -1188,14 +1189,15 @@ jt_ptl_add_route (int argc, char **argv) PCFG_INIT(pcfg, NAL_CMD_ADD_ROUTE); pcfg.pcfg_nid = gateway_nid; - pcfg.pcfg_nal = g_nal; + pcfg.pcfg_nal = ROUTER; + pcfg.pcfg_gw_nal = g_nal; pcfg.pcfg_nid2 = MIN (nid1, nid2); pcfg.pcfg_nid3 = MAX (nid1, nid2); rc = pcfg_ioctl(&pcfg); if (rc != 0) { - fprintf (stderr, "IOC_PORTAL_ADD_ROUTE failed: %s\n", strerror (errno)); + fprintf (stderr, "NAL_CMD_ADD_ROUTE failed: %s\n", strerror (errno)); return (-1); } @@ -1250,7 +1252,8 @@ jt_ptl_del_route (int argc, char **argv) } PCFG_INIT(pcfg, NAL_CMD_DEL_ROUTE); - pcfg.pcfg_nal = g_nal; + pcfg.pcfg_nal = ROUTER; + pcfg.pcfg_gw_nal = g_nal; pcfg.pcfg_nid = nid; pcfg.pcfg_nid2 = nid1; pcfg.pcfg_nid3 = nid2; @@ -1258,7 +1261,7 @@ jt_ptl_del_route (int argc, char **argv) rc = pcfg_ioctl(&pcfg); if (rc != 0) { - fprintf (stderr, "IOC_PORTAL_DEL_ROUTE ("LPX64") failed: %s\n", nid, strerror (errno)); + fprintf (stderr, "NAL_CMD_DEL_ROUTE ("LPX64") failed: %s\n", nid, strerror (errno)); return (-1); } @@ -1309,7 +1312,8 @@ jt_ptl_notify_router (int argc, char **argv) } PCFG_INIT(pcfg, NAL_CMD_NOTIFY_ROUTER); - pcfg.pcfg_nal = g_nal; + pcfg.pcfg_nal = ROUTER; + pcfg.pcfg_gw_nal = g_nal; pcfg.pcfg_nid = nid; pcfg.pcfg_flags = enable; /* Yeuch; 'cept I need a __u64 on 64 bit machines... */ @@ -1318,7 +1322,7 @@ jt_ptl_notify_router (int argc, char **argv) rc = pcfg_ioctl(&pcfg); if (rc != 0) { - fprintf (stderr, "IOC_PORTAL_NOTIFY_ROUTER ("LPX64") failed: %s\n", + fprintf (stderr, "NAL_CMD_NOTIFY_ROUTER ("LPX64") failed: %s\n", nid, strerror (errno)); return (-1); } @@ -1342,13 +1346,14 @@ jt_ptl_print_routes (int argc, char **argv) for (index = 0;;index++) { PCFG_INIT(pcfg, NAL_CMD_GET_ROUTE); + pcfg.pcfg_nal = ROUTER; pcfg.pcfg_count = index; rc = pcfg_ioctl(&pcfg); if (rc != 0) break; - gateway_nal = pcfg.pcfg_nal; + gateway_nal = pcfg.pcfg_gw_nal; gateway_nid = pcfg.pcfg_nid; nid1 = pcfg.pcfg_nid2; nid2 = pcfg.pcfg_nid3; diff --git a/lustre/tests/socketclient b/lustre/tests/socketclient new file mode 100755 index 0000000..5e6e659 --- /dev/null +++ b/lustre/tests/socketclient @@ -0,0 +1,12 @@ +#!/usr/bin/perl -w +use Socket; +use strict; +my ($rendezvous, $line); + +$rendezvous = shift || <@ARGV>; +socket(SOCK, AF_UNIX, SOCK_STREAM, 0) || die "socket: $!"; +connect(SOCK, sockaddr_un($rendezvous)) || die "connect: $!"; +while (defined($line = )) { + print $line; +} +exit; diff --git a/lustre/tests/socketserver b/lustre/tests/socketserver new file mode 100755 index 0000000..25bbb6e --- /dev/null +++ b/lustre/tests/socketserver @@ -0,0 +1,21 @@ +#! /usr/bin/perl -w +use strict; +use Socket; + +BEGIN { $ENV{PATH} = '/usr/ucb:/bin' } +sub logmsg { print "$0 $$: @_ at ", scalar localtime, "\n" } + +my $NAME = <@ARGV>; +my $uaddr = sockaddr_un($NAME); + +socket(Server,AF_UNIX,SOCK_STREAM,0) || die "socket: $!"; +unlink($NAME); +bind (Server, $uaddr) || die "bind: $!"; +listen(Server,SOMAXCONN) || die "listen: $!"; + +logmsg "server started on $NAME"; + +accept(Client,Server); +logmsg "connection on $NAME"; +print Client "from server\n"; +close Client;