netmgr_strtond ?

Hi,

i cannot understand netmgr_strtond routine.

assign :
my box name = vasa
and domain = “” (no domain)

if so :
netmgr_ndtostr(…)
will return /net/vasa

but call:
netmgr_strtond ("/net/vasa")
(or netmgr_strtond (“vasa”), netmgr_strtond (“localhost”), etc)
always returns error:
“No route to host”

where is my mistake, please?


Thanks
vasilii

vasilii <vv40in@rambler.ru> wrote:

Hi,

i cannot understand netmgr_strtond routine.

First of all, make sure QNET is running on your system.

assign :
my box name = vasa
and domain = “” (no domain)

You ALWAYS have a hostname and a domain, if QNET is running.
Check getconf CS_HOSTNAME, and getconf CS_DOMAIN. If you
don’t set CS_DOMAIN yourself, QNET will append a default
for your (.net.intra)

if so :
netmgr_ndtostr(…)
will return /net/vasa

I supposed you passed in ND_LOCAL_NODE as nd ?

but call:
netmgr_strtond ("/net/vasa")
(or netmgr_strtond (“vasa”), netmgr_strtond (“localhost”), etc)
always returns error:
“No route to host”

netmgr_strtond(“localhost”, 0) will fail with “No route to host”
because you don’t have a node named “localhost”.

I have no idea why “/net/vasa” or “vasa” will fail, do you have
a sample program to prove it ?

-xtang

a sample program to prove it ?
-xtang

it follows:

// file nd2str.c

#ifdef QNXNTO
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <netdb.h>
#include <errno.h>
#include <sys/param.h>
#include <sys/netmgr.h>

int main(int argc, char **argv){
int x;
char name[256] = “”;
if (argc > 1) {
int nd;
if (!isdigit(argv[1][0])){
nd = netmgr_strtond (argv[0], 0);
if (nd >= 0){
printf (“nid: %d\n”,nd);
}else
perror (“netmgr_strtond”);
}else{
nd = atoi(argv[1]);
nd = netmgr_ndtostr (

ND2S_DIR_SHOW|ND2S_DOMAIN_SHOW|ND2S_LOCAL_STR|ND2S_NAME_SHOW|ND2S_QOS_SHOW|N
D2S_SEP_FORCE,
nd, name, sizeof name);
if (nd >= 0){
printf (“name: [%s]\n”, name);
}else
perror (“netmgr_ndtostr”);
}
return 0;
}else{
printf (“Usage: %s [number | name]\n”,argv[0]);
}
return 0;
}

#endif

if i enter
…/nd2str 0
then:
name: [/net/vasa1.vasahome.ru~loadbalance/]

but all of:
…/nd2str /net/vasa1.vasahome.ru
…/nd2str vasa1.vasahome.ru
…/nd2str /net/vasa1
…/nd2str vasa1
couses
“No route to host”
why, please?


Thanks
vasilii

vasilii <vv40in@rambler.ru> wrote:

a sample program to prove it ?
-xtang

You should really debug your program first, see what
you passed to netmgr_strtond() call.

With “argv[0]” you are try to resolving a node named “nd2str”,
try argv[1].

Also, may I suggest “nd >= 0” is not a valid test, you MUST
do “nd == -1” to test the error case (as document suggest).

-xtang


it follows:

// file nd2str.c

#ifdef QNXNTO
#include <stdio.h
#include <unistd.h
#include <string.h
#include <netdb.h
#include <errno.h
#include <sys/param.h
#include <sys/netmgr.h

int main(int argc, char **argv){
int x;
char name[256] = “”;
if (argc > 1) {
int nd;
if (!isdigit(argv[1][0])){
nd = netmgr_strtond (argv[0], 0);
if (nd >= 0){
printf (“nid: %d\n”,nd);
}else
perror (“netmgr_strtond”);
}else{
nd = atoi(argv[1]);
nd = netmgr_ndtostr (

ND2S_DIR_SHOW|ND2S_DOMAIN_SHOW|ND2S_LOCAL_STR|ND2S_NAME_SHOW|ND2S_QOS_SHOW|N
D2S_SEP_FORCE,
nd, name, sizeof name);
if (nd >= 0){
printf (“name: [%s]\n”, name);
}else
perror (“netmgr_ndtostr”);
}
return 0;
}else{
printf (“Usage: %s [number | name]\n”,argv[0]);
}
return 0;
}

#endif

if i enter
./nd2str 0
then:
name: [/net/vasa1.vasahome.ru~loadbalance/]

but all of:
./nd2str /net/vasa1.vasahome.ru
./nd2str vasa1.vasahome.ru
./nd2str /net/vasa1
./nd2str vasa1
couses
“No route to host”
why, please?


Thanks
vasilii

You should really debug your program first, see what
you passed to netmgr_strtond() call.

With “argv[0]” you are try to resolving a node named “nd2str”,
try argv[1].
oh, it was my stupidest error!!