hi bryan,

imho the following solution is the easiest one.

start you phone application an store data in a log
  phone >>log

then use "tail -f log" to see log in realtime.

advantage: you can run your application without thinking about telnet
and still see your log in real time.

In case you do not have enough mem, use nfs.

like: mount -t nfs server:/remote/dir /mnt -o nolock

now you can use

your mileage may vary.

re,
 wh






Bryan Le wrote:
> Hi,
> 
> The following is ps command in telnet window:
> 
> /////////////////////////////////////////////
> ps                    
> PID  Uid     VmSize Stat Command      
> 1 root        616 S   init            
> 2 root            SW  [ksoftirqd/0]   
> 3 root            SW< [desched/0]     
> 4 root            SW< [events/0]      
> 5 root            SW< [khelper]       
> 10 root            SW< [kthread]      
> 13 root            SW< [kblockd/0]    
> 44 root            SW  [pdflush]      
> 45 root            SW  [pdflush]      
> 47 root            SW< [aio/0]        
> 46 root            SW  [kswapd0]      
> 71 root            SW  [mtdblockd]    
> 61 root            SW  [kseriod]      
> 95 root            SW< [IRQ 8]        
> 98 root            SW< [IRQ 15]       
> 115 root        616 S   init          
> 116 root        588 S   /bin/sh /etc/init.d/rcS       
> 147 root            SW< [IRQ 35]      
> 150 root       572    /bin/sh
> /etc/init.d/S99tonecommander start    
> 153 root       4480 S   phone         
> 152 root            Z   [telnetd]     
> 154 root        564 S   telnetd -l /bin/sh    
> 155 root       3776 S   phone         
> 163 root       4480 S   phone         
> 164 root       4480 S   phone         
> 165 root       4480 S   phone         
> 166 root       3816 S   phone         
> 167 root            SW< [IRQ 45]      
> 168 root       4480 S   phone         
> 169 root       4480 S   phone         
> 171 root       4480 S   phone         
> 178 root       4480 S   phone         
> 179 root       4480 S   phone         
> 180 root       4480 S   phone         
> 181 root       4480 S   phone         
> 182 root       4480 S   phone         
> 189 root            Z   [udhcpc]      
> 190 root        576 S   udhcpc -i esw0 -H
> TC-SIP-3778663013 -V TCS_04   
> 197 root       4480 S   phone         
> 206 root        612 S   /bin/sh       
> 207 root       4480 S   phone         
> 208 root        612 R   ps    
> / $                   
> 
> ///////////////////////////////////////////////
> 
> TEST1 is "phone (PID=153)". The phone application is
> started independently (not from telnet window). Do you
> know how to redirect output from phone application to
> telnet window?
> 
> Thank you,
> Bryan
> 
> 
> --- Denys Vlasenko <[EMAIL PROTECTED]> wrote:
> 
>> From: Denys Vlasenko <[EMAIL PROTECTED]>
>> To: [email protected]
>> Subject: Re: [PATCH] add IP check functionality to
>> udhcpc
>> Date: Wed, 21 Nov 2007 14:36:57 -0800
>>
>> On Wednesday 21 November 2007 05:30, Jonas
>> Danielsson wrote:
>>> Hi,
>>>
>>> as part of a project at Axis I've modified the
>> busybox udhcp client to
>>> make it perform a final check of
>>> the offered IP.
>>>
>>> The final check is mentioned in the DHCP rfc as:
>>>
>>>   The client SHOULD perform a check on the
>> suggested address to
>>>   ensure that the address is not already in use. 
>> For example, if the
>>>   client is on a network that supports ARP, the
>> client may issue an
>>>   ARP request for the suggested request.  When
>> broadcasting an ARP
>>>   request for the suggested address, the client
>> must fill in its own
>>>   hardware address as the sender's hardware
>> address, and 0 as the
>>>   sender's IP address, to avoid confusing ARP
>> caches in other hosts
>>>   on the same subnet.  If the network address
>> appears to be in use,
>>>   the client MUST send a DHCPDECLINE message to
>> the server. The
>>>   client SHOULD broadcast an ARP reply to announce
>> the client's new
>>>   IP address and clear any outdated ARP cache
>> entries in hosts on the
>>>   client's subnet.
>>>
>>> I've added a CONFIGURE_FEATURE_UDHCPC_ARPING to
>> enable this
>>> functionality and
>>> command-line-options -a, --arping to use it. I've
>> also added a -W,
>>> --wait to set how long to wait after sending
>>> the DHCPDECLINE before restarting the discovery
>> process (minimum 10
>>> seconds).
>>>
>>> The client uses the arpping function from
>> arpping.c. And I've modified
>>> the arpping function.
>>> Why? The arpping-function performed validation on
>> the arp reply by
>>> checking the target hardware address field in
>>> the arp reply against the client mac address. This
>> will not work when
>>> working with Linux machines.
>>>
>>> When the Linux kernel receives an arp probe (arp
>> request with sender ip
>>> 0) it will return an arp reply with the target ip
>> field and target
>>> hardware field set to the same as the source
>> fields. I've sent a patch
>>> to the Linux kernel to fix this, the discussion
>> about it
>>> can be seen here:
>> http://thread.gmane.org/gmane.linux.kernel/603586.
>> The
>>> patch has been applied to David Millers tree.
>>>
>>> In the discussion I mention the check performed in
>> udhcp arping (and
>>> also dhcpcd from Debian) and got the following
>> response from Alexey
>>> Kuznetov:
>>> "Do not do this. Mainly, because you already know
>> that this does not work
>>>  with linux. :-) Logically, target hw address in
>> arp reply is just
>>>  a nonsensial redundancy, it should not be checked
>> and even looked at."
>>> So the check of target hardware address in arpping
>> has been removed in
>>> my patch.
>>>
>>> Revision used: The patch is from the daily
>> snapshot from 071120.
>>> Is this something you would consider to apply?
>>
>> Had to edit it quite a bit. You added #include's
>> which were not needed.
>> You removed memcmp without explaining why.
>> send_decline()'s stype was different from
>> surrounding code.
>>
>> +static int arpcheck = 0;
>> +static int decline_wait = 10;
>>
>> These statics are not needed, local variables will
>> work as well.
>>
>> I fixed these things, and possibly added my own bugs
>> ;)
>>
>> Please test attached patch, is it still doing what
>> you need?
>>
>> Question: do you really need "-W seconds"?
>> Why not reuse "-A seconds" value?
>> --
>> vda
>>> diff -d -urpN busybox.1/include/usage.h
>> busybox.2/include/usage.h
>> --- busybox.1/include/usage.h        2007-11-17
>> 19:56:45.000000000 -0800
>> +++ busybox.2/include/usage.h        2007-11-21
>> 14:28:52.000000000 -0800
>> @@ -2183,8 +2183,8 @@
>>         "and * (run both after creating and before
>> deleting). The commands run in\n" \
>>         "the /dev directory, and use system() which
>> calls /bin/sh.\n\n" \
>>      ) \
>> -       "Config file parsing stops on the first
>> matching line. If no config\n"\
>> -       "entry is matched, devices are created with
>> default 0:0 660. (Make\n"\
>> +       "Config file parsing stops on the first
>> matching line. If no config\n" \
>> +       "entry is matched, devices are created with
>> default 0:0 660. (Make\n" \
>>         "the last line match .* to override
>> this.)\n\n" \
>>      )
>>  
>> @@ -3843,44 +3843,50 @@
>> USE_FEATURE_RUN_PARTS_FANCY("\n      -l      Print
>>         "    [-p pidfile] [-r IP] [-s script]"
>>  #define udhcpc_full_usage \
>>      USE_GETOPT_LONG( \
>> -       "    -V,--vendorclass=CLASSID        Set vendor class
>> identifier" \
>> -       "\n  -i,--interface=INTERFACE        Interface to
>> use (default: eth0)" \
>> +       "    -V,--vendorclass=CLASSID        Vendor class
>> identifier" \
>> +       "\n  -i,--interface=INTERFACE        Interface to
>> use (default eth0)" \
>>         "\n  -H,-h,--hostname=HOSTNAME       Client
>> hostname" \
>> -       "\n  -c,--clientid=CLIENTID  Set client
>> identifier" \
>> +       "\n  -c,--clientid=CLIENTID  Client
>> identifier" \
>>         "\n  -C,--clientid-none      Suppress default
>> client identifier" \
>> -       "\n  -p,--pidfile=file       Store process ID of
>> daemon in file" \
>> +       "\n  -p,--pidfile=file       Create pidfile" \
>>         "\n  -r,--request=IP         IP address to request"
>> \
>>         "\n  -s,--script=file        Run file at dhcp events
>> (default: /usr/share/udhcpc/default.script)" \
>> -       "\n  -t,--retries=N          Send up to N request
>> packets"\
>> -       "\n  -T,--timeout=N          Try to get a lease for N
>> seconds (default: 3)"\
>> -       "\n  -A,--tryagain=N         Wait N seconds
>> (default: 60) after failure"\
>> +       "\n  -t,--retries=N          Send up to N request
>> packets" \
>> +       "\n  -T,--timeout=N          Try to get a lease for N
>> seconds (default 3)" \
>> +       "\n  -A,--tryagain=N         Wait N seconds (default
>> 60) after failure" \
>>         "\n  -f,--foreground Run in foreground" \
>> -       "\n  -b,--background Background if lease
>> cannot be immediately negotiated" \
>> +       "\n  -b,--background Background if lease is
>> not immediately obtained" \
>>         "\n  -S,--syslog     Log to syslog too" \
>> -       "\n  -n,--now        Exit with failure if lease
>> cannot be immediately negotiated" \
>> +       "\n  -n,--now        Exit with failure if lease is
>> not immediately obtained" \
>>         "\n  -q,--quit       Quit after obtaining lease" \
>>         "\n  -R,--release    Release IP on quit" \
>> -       "\n  -v,--version    Display version" \
>> +    USE_FEATURE_UDHCPC_ARPING( \
>> +       "\n  -a,--arping     Use arping to validate
>> offered address" \
>> +       "\n  -W,--wait=N     Wait N seconds after
>> declining (default 10)" \
>> +    ) \
>>      ) \
>>      SKIP_GETOPT_LONG( \
>> -       "    -V CLASSID      Set vendor class identifier" \
>> +       "    -V CLASSID      Vendor class identifier" \
>>         "\n  -i INTERFACE    Interface to use (default:
>> eth0)" \
>>         "\n  -H,-h HOSTNAME  Client hostname" \
>> -       "\n  -c CLIENTID     Set client identifier" \
>> +       "\n  -c CLIENTID     Client identifier" \
>>         "\n  -C              Suppress default client identifier"
>> \
>> -       "\n  -p file         Store process ID of daemon in
>> file" \
>> +       "\n  -p file         Create pidfile" \
>>         "\n  -r IP           IP address to request" \
>>         "\n  -s file         Run file at dhcp events
>> (default: /usr/share/udhcpc/default.script)" \
>> -       "\n  -t N            Send up to N request packets"\
>> -       "\n  -T N            Try to get a lease for N seconds
>> (default: 3)"\
>> -       "\n  -A N            Wait N seconds (default: 60) after
>> failure"\
>> +       "\n  -t N            Send up to N request packets" \
>> +       "\n  -T N            Try to get a lease for N seconds
>> (default 3)" \
>> +       "\n  -A N            Wait N seconds (default 60) after
>> failure" \
>>         "\n  -f              Run in foreground" \
>> -       "\n  -b              Background if lease cannot be
>> immediately negotiated" \
>> +       "\n  -b              Background if lease is not
>> immediately obtained" \
>>         "\n  -S              Log to syslog too" \
>> -       "\n  -n              Exit with failure if lease cannot be
>> immediately negotiated" \
>> +       "\n  -n              Exit with failure if lease is not
>> immediately obtained" \
>>         "\n  -q              Quit after obtaining lease" \
>>         "\n  -R              Release IP on quit" \
>> -       "\n  -v              Display version" \
>> +    USE_FEATURE_UDHCPC_ARPING( \
>> +       "\n  -a              Use arping to validate offered
>> address" \
>> +       "\n  -W N            Wait N seconds after declining
>> (default 10)" \
>> +    ) \
>>      )
>>  
>>  #define udhcpd_trivial_usage \
>> diff -d -urpN busybox.1/networking/udhcp/Config.in
>> busybox.2/networking/udhcp/Config.in
>> --- busybox.1/networking/udhcp/Config.in     2007-11-15
>> 21:02:19.000000000 -0800
>> +++ busybox.2/networking/udhcp/Config.in     2007-11-21
>> 13:12:36.000000000 -0800
>> @@ -54,6 +54,16 @@ config APP_UDHCPC
>>  
>>        See http://udhcp.busybox.net for further
>> details.
>>  
>> +config FEATURE_UDHCPC_ARPING
>> +    bool "Ask udhcpc to verify that the offered
>> address is free, using arpping"
>> +    default y
>> +    depends on APP_UDHCPC
>> +    help
>> +      If selected, udhcpc will use arpping to make
>> sure the offered address
>> +      is really available. The client will DHCPDECLINE
>> the offer if the
>> +      address is in use, and restart the discover
>> process.
>> +
>> +
>>  config FEATURE_UDHCP_DEBUG
>>      bool "Compile udhcp with noisy debugging messages"
>>      default n
>> diff -d -urpN busybox.1/networking/udhcp/Kbuild
>> busybox.2/networking/udhcp/Kbuild
>> --- busybox.1/networking/udhcp/Kbuild        2007-11-15
>> 21:02:19.000000000 -0800
>> +++ busybox.2/networking/udhcp/Kbuild        2007-11-21
>> 13:57:24.000000000 -0800
>> @@ -10,10 +10,16 @@ lib-$(CONFIG_APP_UDHCPC)       
>> += commo
>>                                     signalpipe.o
>> socket.o
>>  lib-$(CONFIG_APP_UDHCPD)        += common.o
>> options.o packet.o \
>>                                     signalpipe.o
>> socket.o
>> +
>>  lib-$(CONFIG_APP_UDHCPC)        += dhcpc.o
>> clientpacket.o clientsocket.o \
>>                                     script.o
>> +
>> +UDHCPC_NEEDS_ARPING-$(CONFIG_FEATURE_UDHCPC_ARPING)
>> = y
>> +lib-$(UDHCPC_NEEDS_ARPING)      += arpping.o
>> +
>>  lib-$(CONFIG_APP_UDHCPD)        += dhcpd.o
>> arpping.o files.o leases.o \
>>                                     serverpacket.o
>> static_leases.o
>> +
>>  lib-$(CONFIG_APP_DUMPLEASES)    += dumpleases.o
>>  lib-$(CONFIG_APP_DHCPRELAY)     += dhcprelay.o
>>  lib-$(CONFIG_FEATURE_RFC3397)   += domain_codec.o
>> diff -d -urpN busybox.1/networking/udhcp/arpping.c
>> busybox.2/networking/udhcp/arpping.c
>> --- busybox.1/networking/udhcp/arpping.c     2007-11-15
>> 21:02:19.000000000 -0800
>> +++ busybox.2/networking/udhcp/arpping.c     2007-11-21
>> 14:29:30.000000000 -0800
>> @@ -32,12 +32,16 @@ struct arpMsg {
>>      uint8_t  pad[18];       /* 2a pad for min.
>> ethernet payload (60 bytes) */
>>  } ATTRIBUTE_PACKED;
>>  
>> +enum {
>> +    ARP_MSG_SIZE = 0x2a
>> +};
>> +
>>  
>>  /* Returns 1 if no reply received */
>>  
>>  int arpping(uint32_t test_ip, uint32_t from_ip,
>> uint8_t *from_mac, const char *interface)
>>  {
>> -    int timeout_ms = 2000;
>> +    int timeout_ms;
>>      struct pollfd pfd[1];
>>  #define s (pfd[0].fd)           /* socket */
>>      int rv = 1;             /* "no reply received" yet
>> */
>> @@ -51,7 +55,7 @@ int arpping(uint32_t test_ip,
>> uint32_t f
>>      }
>>  
>>      if (setsockopt_broadcast(s) == -1) {
>> -            bb_perror_msg("cannot setsocketopt on raw
>> socket");
>> +            bb_perror_msg("cannot enable bcast on raw
>> socket");
>>              goto ret;
>>      }
>>  
>> @@ -67,28 +71,35 @@ int arpping(uint32_t test_ip,
>> uint32_t f
>>      arp.operation = htons(ARPOP_REQUEST);           /*
>> ARP op code */
>>      memcpy(arp.sHaddr, from_mac, 6);                /*
>> source hardware address */
>>      memcpy(arp.sInaddr, &from_ip, sizeof(from_ip)); /*
>> source IP address */
>> -    /* tHaddr */                                    /*
>> target hardware address */
>> +    /* tHaddr is zero-fiiled */                     /*
>> target hardware address */
>>      memcpy(arp.tInaddr, &test_ip, sizeof(test_ip)); /*
>> target IP address */
>>  
>>      memset(&addr, 0, sizeof(addr));
>>      safe_strncpy(addr.sa_data, interface,
>> sizeof(addr.sa_data));
>> -    if (sendto(s, &arp, sizeof(arp), 0, &addr,
>> sizeof(addr)) < 0)
>> +    if (sendto(s, &arp, sizeof(arp), 0, &addr,
>> sizeof(addr)) < 0) {
>> +            // TODO: error message? caller didn't expect us
>> to fail,
>> +            // just returning 1 "no reply received" misleads
>> it.
>>              goto ret;
>> +    }
>>  
>>      /* wait for arp reply, and check it */
>> +    timeout_ms = 2000;
>>      do {
>>              int r;
>>              unsigned prevTime = monotonic_us();
>>  
>>              pfd[0].events = POLLIN;
>>              r = safe_poll(pfd, 1, timeout_ms);
>> -            if (r < 0) {
>> +            if (r < 0)
>>                      break;
>> -            } else if (r) {
>> -                    if (read(s, &arp, sizeof(arp)) < 0)
>> +            if (r) {
>> +                    r = read(s, &arp, sizeof(arp));
>> +                    if (r < 0)
>>                              break;
>> -                    if (arp.operation == htons(ARPOP_REPLY)
>> -                     && memcmp(arp.tHaddr, from_mac, 6) == 0
>> +                    if (r >= ARP_MSG_SIZE
>> +                     && arp.operation == htons(ARPOP_REPLY)
>> +                     /* don't check it: Linux doesn't return proper
>> tHaddr (fixed in 2.6.24?) */
>> +                     /* && memcmp(arp.tHaddr, from_mac, 6) == 0 */
>>                       && *((uint32_t *) arp.sInaddr) == test_ip
>>                      ) {
>>                              rv = 0;
>> diff -d -urpN
>> busybox.1/networking/udhcp/clientpacket.c
>> busybox.2/networking/udhcp/clientpacket.c
>> --- busybox.1/networking/udhcp/clientpacket.c
>> 2007-11-15 21:02:19.000000000 -0800
>> +++ busybox.2/networking/udhcp/clientpacket.c
>> 2007-11-21 13:59:30.000000000 -0800
>> @@ -69,6 +69,22 @@ static void add_requests(struct
>> dhcpMess
>>  
>>  }
>>  
>> +#if ENABLE_FEATURE_UDHCPC_ARPING
>> +/* Unicast a DHCP decline message */
>> +int send_decline(uint32_t xid, uint32_t server)
>> +{
>> +    struct dhcpMessage packet;
>> +
>> +    init_packet(&packet, DHCPDECLINE);
>> +    packet.xid = xid;
>> +    add_requests(&packet);
>> +
>> +    bb_info_msg("Sending decline...");
>> +
>> +    return udhcp_raw_packet(&packet, INADDR_ANY,
>> CLIENT_PORT, INADDR_BROADCAST,
>> +            SERVER_PORT, MAC_BCAST_ADDR,
>> client_config.ifindex);
>> +}
>> +#endif
>>  
>>  /* Broadcast a DHCP discover packet to the network,
>> with an optionally requested IP */
>>  int send_discover(uint32_t xid, uint32_t requested)
>> diff -d -urpN busybox.1/networking/udhcp/common.h
>> busybox.2/networking/udhcp/common.h
>> --- busybox.1/networking/udhcp/common.h      2007-11-15
>> 21:02:19.000000000 -0800
>> +++ busybox.2/networking/udhcp/common.h      2007-11-21
>> 13:32:30.000000000 -0800
>> @@ -76,7 +76,7 @@ void udhcp_run_script(struct
>> dhcpMessage
>>  
>>  void udhcp_sp_setup(void);
>>  int udhcp_sp_fd_set(fd_set *rfds, int extra_fd);
>> -int udhcp_sp_read(fd_set *rfds);
>> +int udhcp_sp_read(const fd_set *rfds);
>>  int raw_socket(int ifindex);
>>  int read_interface(const char *interface, int
>> *ifindex, uint32_t *addr, uint8_t *arp);
>>  int listen_socket(/*uint32_t ip,*/ int port, const
>> char *inf);
>> diff -d -urpN busybox.1/networking/udhcp/dhcpc.c
>> busybox.2/networking/udhcp/dhcpc.c
>> --- busybox.1/networking/udhcp/dhcpc.c       2007-11-15
>> 21:02:19.000000000 -0800
>> +++ busybox.2/networking/udhcp/dhcpc.c       2007-11-21
>> 14:27:41.000000000 -0800
>> @@ -145,6 +145,13 @@ int udhcpc_main(int argc, char
>> **argv)
>>  {
>>      uint8_t *temp, *message;
>>      char *str_c, *str_V, *str_h, *str_F, *str_r,
>> *str_T, *str_A, *str_t;
>> +    int tryagain_timeout = 60;
>> +    int discover_timeout = 3;
>> +    int discover_retries = 3;
>> +#if ENABLE_FEATURE_UDHCPC_ARPING
>> +    int decline_wait = 10;
>> +    char *str_W;
>> +#endif
>>      uint32_t xid = 0;
>>      uint32_t lease = 0; /* can be given as 32-bit
>> quantity */
>>      unsigned t1 = 0, t2 = 0; /* what a wonderful names
>> */
>> @@ -180,6 +187,10 @@ int udhcpc_main(int argc, char
>> **argv)
>>              OPT_v = 1 << 17,
>>              OPT_S = 1 << 18,
>>              OPT_A = 1 << 19,
>> +#if ENABLE_FEATURE_UDHCPC_ARPING
>> +            OPT_a = 1 << 20,
>> +            OPT_W = 1 << 21,
>> +#endif
>>      };
>>  #if ENABLE_GETOPT_LONG
>>      static const char udhcpc_longopts[] ALIGN1 =
>> @@ -203,14 +214,15 @@ int udhcpc_main(int argc, char
>> **argv)
>>              "retries\0"       Required_argument "t"
>>              "tryagain\0"      Required_argument "A"
>>              "syslog\0"        No_argument       "S"
>> +#if ENABLE_FEATURE_UDHCPC_ARPING
>> +            "arping\0"        No_argument       "a"
>> +            "wait\0"          Required_argument "W"
>> +#endif
>>              ;
>>  #endif
>>      /* Default options. */
>>      client_config.interface = "eth0";
>>      client_config.script = DEFAULT_SCRIPT;
>> -    client_config.retries = 3;
>> -    client_config.timeout = 3;
>> -    client_config.tryagain = 60;
>>  
>>      /* Parse command line */
>>      opt_complementary = "c--C:C--c" // mutually
>> exclusive
>> @@ -218,10 +230,12 @@ int udhcpc_main(int argc, char
>> **argv)
>>  #if ENABLE_GETOPT_LONG
>>      applet_long_options = udhcpc_longopts;
>>  #endif
>> -    opt = getopt32(argv,
>> "c:CV:fbH:h:F:i:np:qRr:s:T:t:vSA:",
>> -            &str_c, &str_V, &str_h, &str_h, &str_F,
>> +    opt = getopt32(argv,
>> "c:CV:fbH:h:F:i:np:qRr:s:T:t:vSA:"
>> +            USE_FEATURE_UDHCPC_ARPING("aW:")
>> +            , &str_c, &str_V, &str_h, &str_h, &str_F,
>>              &client_config.interface, &client_config.pidfile,
>> &str_r,
>>              &client_config.script, &str_T, &str_t, &str_A
>> +            USE_FEATURE_UDHCPC_ARPING(, &str_W)
>>              );
>>  
>>      if (opt & OPT_c)
>> @@ -259,11 +273,11 @@ int udhcpc_main(int argc, char
>> **argv)
>>              requested_ip = inet_addr(str_r);
>>      // if (opt & OPT_s) client_config.script = ...
>>      if (opt & OPT_T)
>> -            client_config.timeout = xatoi_u(str_T);
>> +            discover_timeout = xatoi_u(str_T);
>>      if (opt & OPT_t)
>> -            client_config.retries = xatoi_u(str_t);
>> +            discover_retries = xatoi_u(str_t);
>>      if (opt & OPT_A)
>> -            client_config.tryagain = xatoi_u(str_A);
>> +            tryagain_timeout = xatoi_u(str_A);
>>      if (opt & OPT_v) {
>>              puts("version "BB_VER);
>>              return 0;
>> @@ -274,6 +288,11 @@ int udhcpc_main(int argc, char
>> **argv)
>>              logmode |= LOGMODE_SYSLOG;
>>      }
>>  
>> +#if ENABLE_FEATURE_UDHCPC_ARPING
>> +    if (opt & OPT_W)
>> +            decline_wait = xatou_range(str_W, 10, INT_MAX);
>> +#endif
>> +
>>      if (read_interface(client_config.interface,
>> &client_config.ifindex,
>>                         NULL, client_config.arp))
>>              return 1;
>> @@ -339,14 +358,14 @@ int udhcpc_main(int argc, char
>> **argv)
>>                      /* timeout dropped to zero */
>>                      switch (state) {
>>                      case INIT_SELECTING:
>> -                            if (packet_num < client_config.retries) {
>> +                            if (packet_num < discover_retries) {
>>                                      if (packet_num == 0)
>>                                              xid = random_xid();
>>  
>>                                      /* send discover packet */
>>                                      send_discover(xid, requested_ip); /* 
>> broadcast
>> */
>>  
>> -                                    timeout = now + client_config.timeout;
>> +                                    timeout = now + discover_timeout;
>>                                      packet_num++;
>>                              } else {
>>                                      udhcp_run_script(NULL, "leasefail");
>> @@ -360,12 +379,12 @@ int udhcpc_main(int argc, char
>> **argv)
>>                                      }
>>                                      /* wait to try again */
>>                                      packet_num = 0;
>> -                                    timeout = now + client_config.tryagain;
>> +                                    timeout = now + tryagain_timeout;
>>                              }
>>                              break;
>>                      case RENEW_REQUESTED:
>>                      case REQUESTING:
>> -                            if (packet_num < client_config.retries) {
>> +                            if (packet_num < discover_retries) {
>>                                      /* send request packet */
>>                                      if (state == RENEW_REQUESTED)
>>                                              send_renew(xid, server_addr, 
>> requested_ip);
>> /* unicast */
>> @@ -491,6 +510,29 @@ int udhcpc_main(int argc, char
>> **argv)
>>                                              lease = ntohl(lease);
>>                                      }
>>  
>> +#if ENABLE_FEATURE_UDHCPC_ARPING
>> +                                    if (opt & OPT_a) {
>> +                                            if (!arpping(packet.yiaddr,
>> +                                                        (uint32_t) 0,
>> +                                                        client_config.arp,
>> +                                                        
>> client_config.interface)
>> +                                            ) {
>> +                                                    bb_info_msg("offered 
>> address is in use,"
>> +                                                            " declining");
>> +                                                    send_decline(xid, 
>> server_addr);
>> +
>> +                                                    if (state != REQUESTING)
>> +                                                            
>> udhcp_run_script(NULL, "deconfig");
>> +                                                    state = INIT_SELECTING;
>> +                                                    timeout = now;
>> +                                                    requested_ip = 0;
>> +                                                    packet_num = 0;
>> +                                                    change_mode(LISTEN_RAW);
>> +                                                    sleep(decline_wait); /* 
>> avoid excessive
>> network traffic */
>> +                                                    break;
>> +                                            }
>> +                                    }
>> +#endif
>>                                      /* enter bound state */
>>                                      t1 = lease / 2;
>>  
>> diff -d -urpN busybox.1/networking/udhcp/dhcpc.h
>> busybox.2/networking/udhcp/dhcpc.h
>> --- busybox.1/networking/udhcp/dhcpc.h       2007-11-15
>> 21:02:19.000000000 -0800
>> +++ busybox.2/networking/udhcp/dhcpc.h       2007-11-21
>> 14:24:23.000000000 -0800
>> @@ -1,5 +1,6 @@
>>  /* vi: set sw=4 ts=4: */
>>  /* dhcpc.h */
>> +
>>  #ifndef _DHCPC_H
>>  #define _DHCPC_H
>>  
>> @@ -28,9 +29,6 @@ struct client_config_t {
>>      uint8_t *hostname;              /* Optional
>> hostname to use */
>>      uint8_t *fqdn;                  /* Optional fully
>> qualified domain name to use */
>>      int ifindex;                    /* Index number of
>> the interface to use */
>> -    int retries;                    /* Max number of
>> request packets */
>> -    int timeout;                    /* Number of
>> seconds to try to get a lease */
>> -    int tryagain;                   /* Number of
>> seconds to try to get a lease */
>>      uint8_t arp[6];                 /* Our arp address
>> */
>>  };
>>  
>> @@ -42,6 +40,9 @@ struct client_config_t {
>>  uint32_t random_xid(void);
>>  int send_discover(uint32_t xid, uint32_t
>> requested);
>>  int send_selecting(uint32_t xid, uint32_t server,
>> uint32_t requested);
>> +#if ENABLE_FEATURE_UDHCPC_ARPING
>> +int send_decline(uint32_t xid, uint32_t server);
>> +#endif
>>  int send_renew(uint32_t xid, uint32_t server,
>> uint32_t ciaddr);
>>  int send_renew(uint32_t xid, uint32_t server,
>> uint32_t ciaddr);
>>  int send_release(uint32_t server, uint32_t ciaddr);
>> diff -d -urpN
>> busybox.1/networking/udhcp/signalpipe.c
>> busybox.2/networking/udhcp/signalpipe.c
>> --- busybox.1/networking/udhcp/signalpipe.c
>> 2007-11-15 21:02:19.000000000 -0800
>> +++ busybox.2/networking/udhcp/signalpipe.c
>> 2007-11-21 13:32:23.000000000 -0800
>> @@ -66,7 +66,7 @@ int udhcp_sp_fd_set(fd_set *rfds,
>> int ex
>>  /* Read a signal from the signal pipe. Returns 0 if
>> there is
>>   * no signal, -1 on error (and sets errno
>> appropriately), and
>>   * your signal on success */
>> -int udhcp_sp_read(fd_set *rfds)
>> +int udhcp_sp_read(const fd_set *rfds)
>>  {
>>      unsigned char sig;
>>  
>>> _______________________________________________
>> busybox mailing list
>> [email protected]
>> http://busybox.net/cgi-bin/mailman/listinfo/busybox
> 
> 
> 
>       
> ____________________________________________________________________________________
> Be a better pen pal. 
> Text or chat with friends inside Yahoo! Mail. See how.  
> http://overview.mail.yahoo.com/
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> busybox mailing list
> [email protected]
> http://busybox.net/cgi-bin/mailman/listinfo/busybox
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> busybox mailing list
> [email protected]
> http://busybox.net/cgi-bin/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/busybox

Reply via email to