@@ -1,5 +1,6 @@
extern int netboot(int argc, char *argv[]);
+extern int ping(char *args_fs, int alen);
PRIM(NET_X2d_LOAD)
int slen = TOS.n; POP;
@@ -17,3 +18,9 @@ PRIM(NET_X2d_LOAD)
}
TOS.n = netboot(i, argvs);
MIRP
+
+PRIM(NET_X2d_PING)
+ int alen = TOS.n; POP;
+ char *arg = TOS.a;
+ TOS.n = ping(arg, alen);
+MIRP
@@ -1,2 +1,3 @@
cod(NET-LOAD)
+cod(NET-PING)
@@ -23,7 +23,7 @@ int netsave(int argc, char *argv[]);
int bcmflash(int argc, char *argv[]);
int mac_sync(int argc, char *argv[]);
int net_eeprom_version( void );
-int ping(int argc, char *argv[]);
+int ping(char *args_fs, int alen);
int dhcp(char *ret_buffer, filename_ip_t * fn_ip, unsigned int retries, int flags);
#endif
@@ -105,8 +105,7 @@ parse_args(const char *args, struct ping_args *ping_args)
return 0;
}
-int
-ping(int argc, char *argv[])
+int ping(char *args_fs, int alen)
{
short arp_failed = 0;
filename_ip_t fn_ip;
@@ -114,15 +113,20 @@ ping(int argc, char *argv[])
struct ping_args ping_args;
uint8_t own_mac[6];
uint32_t netmask;
+ char args[256];
memset(&ping_args, 0, sizeof(struct ping_args));
- if (argc == 2) {
- if (parse_args(argv[1], &ping_args)) {
- usage();
- return -1;
- }
- } else {
+ if (alen <= 0 && alen >= sizeof(args) - 1) {
+ usage();
+ return -1;
+ }
+
+ /* Convert forth string into NUL-terminated C-string */
+ memcpy(args, args_fs, alen);
+ args[alen] = 0;
+
+ if (parse_args(args, &ping_args)) {
usage();
return -1;
}
@@ -69,6 +69,6 @@ INSTANCE VARIABLE ciregs-buffer
ciregs-buffer @ ciregs-size free-mem
;
-: ping ( -- )
- s" ping " my-args $cat (client-exec)
+: ping ( -- errno )
+ my-args net-ping
;
Now that we link libnet to Paflof, we can call the ping function there directly instead of using the one from net-snk. Signed-off-by: Thomas Huth <thuth@redhat.com> --- lib/libnet/libnet.code | 7 +++++++ lib/libnet/libnet.in | 1 + lib/libnet/netapps.h | 2 +- lib/libnet/ping.c | 20 ++++++++++++-------- slof/fs/packages/obp-tftp.fs | 4 ++-- 5 files changed, 23 insertions(+), 11 deletions(-)