Diff for /embedaddon/dnsmasq/contrib/lease-tools/dhcp_release6.c between versions 1.1.1.2 and 1.1.1.3

version 1.1.1.2, 2021/03/17 00:56:46 version 1.1.1.3, 2023/09/27 11:02:07
Line 318  void usage(const char* arg, FILE* stream) Line 318  void usage(const char* arg, FILE* stream)
   fprintf (stream, "Usage: %s %s\n", arg, usage_string);       fprintf (stream, "Usage: %s %s\n", arg, usage_string);   
 }  }
   
   static void fail_fatal(const char *errstr, int exitcode)
   {
     perror(errstr);
     exit(exitcode);
   }
   
 int send_release_packet(const char* iface, struct dhcp6_packet* packet)  int send_release_packet(const char* iface, struct dhcp6_packet* packet)
 {  {
   struct sockaddr_in6 server_addr, client_addr;    struct sockaddr_in6 server_addr, client_addr;
Line 343  int send_release_packet(const char* iface, struct dhcp Line 349  int send_release_packet(const char* iface, struct dhcp
     client_addr.sin6_port = htons(DHCP6_CLIENT_PORT);      client_addr.sin6_port = htons(DHCP6_CLIENT_PORT);
     client_addr.sin6_flowinfo = 0;      client_addr.sin6_flowinfo = 0;
     client_addr.sin6_scope_id =0;      client_addr.sin6_scope_id =0;
    inet_pton(AF_INET6, "::", &client_addr.sin6_addr);    if (inet_pton(AF_INET6, "::", &client_addr.sin6_addr) <= 0)
    bind(sock, (struct sockaddr*)&client_addr, sizeof(struct sockaddr_in6));      fail_fatal("inet_pton", 5);
    inet_pton(AF_INET6, DHCP6_MULTICAST_ADDRESS, &server_addr.sin6_addr);    if (bind(sock, (struct sockaddr*)&client_addr, sizeof(struct sockaddr_in6)) != 0)
       perror("bind"); /* continue on bind error */
     if (inet_pton(AF_INET6, DHCP6_MULTICAST_ADDRESS, &server_addr.sin6_addr) <= 0)
       fail_fatal("inet_pton", 5);
     server_addr.sin6_port = htons(DHCP6_SERVER_PORT);      server_addr.sin6_port = htons(DHCP6_SERVER_PORT);
    int16_t recv_size = 0;    ssize_t recv_size = 0;
     int result;
     for (i = 0; i < 5; i++)      for (i = 0; i < 5; i++)
       {        {
         if (sendto(sock, packet->buf, packet->len, 0, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)          if (sendto(sock, packet->buf, packet->len, 0, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
          {          fail_fatal("sendto failed", 4);
            perror("sendto failed"); 
            exit(4); 
          } 
                   
         recv_size = recvfrom(sock, response, sizeof(response), MSG_DONTWAIT, NULL, 0);          recv_size = recvfrom(sock, response, sizeof(response), MSG_DONTWAIT, NULL, 0);
         if (recv_size == -1)          if (recv_size == -1)
Line 367  int send_release_packet(const char* iface, struct dhcp Line 374  int send_release_packet(const char* iface, struct dhcp
             else              else
               {                {
                 perror("recvfrom");                  perror("recvfrom");
                   result = UNSPEC_FAIL;
               }                }
           }            }
                else
        int16_t result = parse_packet(response, recv_size); 
        if (result == NOT_REPLY_CODE) 
           {            {
            sleep(1);            result = parse_packet(response, recv_size);
            continue;            if (result == NOT_REPLY_CODE)
               {
                 sleep(1);
                 continue;
               }
           }            }
   
         close(sock);          close(sock);
         return result;          return result;
       }        }

Removed from v.1.1.1.2  
changed lines
  Added in v.1.1.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>