Add more padding for arp packets 99/204699/2 submit/tizen/20190426.010452
authorCheoleun Moon <chleun.moon@samsung.com>
Fri, 26 Apr 2019 00:50:04 +0000 (09:50 +0900)
committerCheoleun Moon <chleun.moon@samsung.com>
Fri, 26 Apr 2019 00:53:36 +0000 (09:53 +0900)
The minimum size of ethernet frame is 512 bits (64 octets).
https://review.tizen.org/gerrit/#/c/platform/core/connectivity/net-config/+/204698/

Change-Id: I586d2e2645a71b4de5c8725ba9ca3e624893fc92
Signed-off-by: Cheoleun Moon <chleun.moon@samsung.com>
src/inm-util.c

index 3359d016f0317e117c7969e691c45a7bc458b2d8..08d5facb63c0bb269c03f819a851c6baee7d1bf1 100644 (file)
@@ -55,6 +55,7 @@
 #include <netlink/route/link.h>
 #include <netlink/route/neighbour.h>
 #include <netlink/route/route.h>
+#include <errno.h>
 
 #include <glib.h>
 
@@ -304,9 +305,10 @@ gboolean util_send_arp(gpointer user_data)
 {
        inm_util_arp_data_s *arp_data = (inm_util_arp_data_s *)user_data;
        struct sockaddr_ll ll_addr;
-       guchar buf[60] = {0,};
+       guchar buf[64] = {0,};
        guchar *pos = NULL;
        gint ret = 0;
+       char err_str[128] = {0,};
 
        __INM_FUNC_ENTER__;
 
@@ -340,12 +342,16 @@ gboolean util_send_arp(gpointer user_data)
        memcpy(ll_addr.sll_addr, arp_data->hwaddr, ETH_ALEN);
        ll_addr.sll_ifindex = arp_data->ifindex;
 
-       ret = sendto(arp_data->sock, buf, 42, 0,
+       ret = sendto(arp_data->sock, buf, sizeof(buf), 0,
                (struct sockaddr *) &(ll_addr),
                sizeof(struct sockaddr_ll));
-
-       INM_LOGI("Sent to IP addr: ");
-       __print_ip(arp_data->ipaddr);
+       if (ret < 0) {
+               strerror_r(errno, err_str, 128);
+               INM_LOGE("Sending ARP Packet failed. errno[%d]: %s\n", errno, err_str);
+       } else {
+               INM_LOGI("Sent to IP addr: ");
+               __print_ip(arp_data->ipaddr);
+       }
        __INM_FUNC_EXIT__;
        return (ret != -1);
 }
@@ -430,6 +436,7 @@ void util_create_arp_sock(inm_util_arp_data_s *arp_data)
 
        __init_arp_sock_data(arp_data);
 
+       INM_LOGI("MOON socket AF_PACKET: %d, SOCK_RAW: %d, ETH_P_ARP: %d", AF_PACKET, SOCK_RAW, htons(ETH_P_ARP));
        sock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ARP));
        RET_IF_SOCK_FAILURE(sock);