⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iping.c

📁 MIPS下的boottloader yamon 的源代码
💻 C
字号:

/************************************************************************
 *
 *  iping.c
 *
 *  Shell ip ping command
 *
 *  ping ipaddr [<datagramsize>]
 *
 *
 * ######################################################################
 *
 * Copyright (c) 1999-2000 MIPS Technologies, Inc. All rights reserved. 
 * 
 * Unpublished rights reserved under the Copyright Laws of the United States of 
 * America. 
 * 
 * This document contains information that is proprietary to MIPS Technologies, 
 * Inc. ("MIPS Technologies"). Any copying, modifying or use of this information 
 * (in whole or in part) which is not expressly permitted in writing by MIPS 
 * Technologies or a contractually-authorized third party is strictly 
 * prohibited. At a minimum, this information is protected under unfair 
 * competition laws and the expression of the information contained herein is 
 * protected under federal copyright laws. Violations thereof may result in 
 * criminal penalties and fines. 
 * MIPS Technologies or any contractually-authorized third party reserves the 
 * right to change the information contained in this document to improve 
 * function, design or otherwise. MIPS Technologies does not assume any 
 * liability arising out of the application or use of this information. Any 
 * license under patent rights or any other intellectual property rights owned 
 * by MIPS Technologies or third parties shall be conveyed by MIPS Technologies 
 * or any contractually-authorized third party in a separate license agreement 
 * between the parties. 
 * The information contained in this document constitutes one or more of the 
 * following: commercial computer software, commercial computer software 
 * documentation or other commercial items. If the user of this information, or 
 * any related documentation of any kind, including related technical data or 
 * manuals, is an agency, department, or other entity of the United States 
 * government ("Government"), the use, duplication, reproduction, release, 
 * modification, disclosure, or transfer of this information, or any related 
 * documentation of any kind, is restricted in accordance with Federal 
 * Acquisition Regulation 12.212 for civilian agencies and Defense Federal 
 * Acquisition Regulation Supplement 227.7202 for military agencies. The use of 
 * this information by the Government is further restricted in accordance with 
 * the terms of the license agreement(s) and/or applicable contract terms and 
 * conditions covering this information from MIPS Technologies or any 
 * contractually-authorized third party. 
 *
 ************************************************************************/


/************************************************************************
 *  Include files
 ************************************************************************/

#include <sysdefs.h>
#include <shell_api.h>
#include <env_api.h>
#include <net_api.h>
#include <sysdev.h>
#include <io_api.h>
#include <ctype.h>
#include <stdio.h>
#include <sysenv_api.h>
#include <sys_api.h>
#include "shell.h"

/************************************************************************
 *  Definitions
 ************************************************************************/

/************************************************************************
 *  Public variables
 ************************************************************************/

/************************************************************************
 *  Static variables
 ************************************************************************/

/************************************************************************
 *  Static function prototypes
 ************************************************************************/

static UINT32 
get_options(
    UINT32 argc,
    char   **argv,
    UINT32 *ipaddr,
    UINT32 *size );

static UINT32
do_ping(
    UINT32 ipaddr,
    UINT32 size );

/************************************************************************
 *  Implementation : Static functions
 ************************************************************************/

/************************************************************************
 *                          ping
 ************************************************************************/
static MON_FUNC(ping)
{
    UINT32 ipaddr;
    UINT32 size;
    UINT32 rc;
    
    rc = get_options( argc, argv, &ipaddr, &size );

    if( rc == OK )
        rc = do_ping( ipaddr, size );

    return rc;
}


static UINT32
do_ping(
    UINT32 ipaddr,
    UINT32 size )
{

/* DWP changed to 1 2-26-01 */
#if 1
    return( NET_ping( ipaddr, size ) ) ;
#else
	return OK;
#endif
}


/************************************************************************
 *                          get_options
 ************************************************************************/
static UINT32 
get_options(
    UINT32 argc,
    char   **argv,
    UINT32 *ipaddr,
    UINT32 *size )
{
    t_shell_option decode;
    UINT32         type;
    bool	   ok    = FALSE ;
    UINT32	   error = SHELL_ERROR_SYNTAX;
    UINT32	   i;

    /* Check for options (not allowed) */
    for( i=0; i<argc; i++ )
    {
        if( *argv[i] == '-' )
	{
	    shell_error_data = argv[i];
	    return SHELL_ERROR_OPTION;
        }
    }

    if( argc == 2 )
    {
        if( env_ip_s2num( argv[1], ipaddr, sizeof(UINT32) ) )
        {
            *size = 64 ; /* set default size to 64 bytes */
            ok = TRUE ;
        }
    }

    if( argc == 3 )
    {
        if( env_ip_s2num( argv[1], ipaddr, sizeof(UINT32) ) )
        {
            shell_decode_token( argv[2], &type, &decode );
            if ( type == SHELL_TOKEN_NUMBER )
            {
                *size = decode.number;
                ok = TRUE ;
            }
        }
    }

    return ok ? OK : error;
}

/* Command definition for help */
static t_cmd cmd_def =
{
    "ping",
     ping,
    "ping ipaddr [<datagramsize>]",

    "ping - send ICMP ECHO_REQUEST packets to network host.\n"
    "\n"
    "This command is typically used to verify end-to-end network\n"
    "functionality & connectivity in a debug or bring-up situation.\n"
    "\n"
    "An ICMP ECHO_REQUEST packet must be replied to with an ICMP\n"
    "ECHO_REPLY packet from the remote host ('ipaddr'). The ICMP ECHO\n"
    "packet will contain data with the specified size. The default\n"
    "datagramsize is 64 bytes, minimum is 0 bytes and maximum is 1472\n"
    "bytes. The maximum size is constrained by the Ethernet upper\n"
    "frame size limit (IP segmentation is not supported). If the\n"
    "optional datagramsize parameter is not within the valid range,\n"
    "the default size of 64 bytes will be used.\n"
    "\n"
    "The ping command will stop when the first reply is received\n"
    "from the remote host. If no replies are received, depending on\n"
    "whether the MAC-address of the destination path has been resoluted\n"
    "and kept in a cache, ARP or ICMP_ECHO REQUEST packets are\n"
    "retransmitted up to 3 times before an appropriate error message\n"
    "is finally returned. The user may stop the ping command at any time\n"
    "using Ctrl-C.",

    NULL,
    0,
    FALSE
};

/************************************************************************
 *  Implementation : Public functions
 ************************************************************************/

/************************************************************************
 *
 *                          shell_ping_init
 *  Description :
 *  -------------
 *
 *  Initialise command
 *
 *  Return values :
 *  ---------------
 *
 *  void
 *
 ************************************************************************/
t_cmd *
shell_ping_init( void )
{
    return &cmd_def;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -