Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NMS: Finne ut av hvorfor 2-3 pings droppes hver gang. #38

Closed
KristianLyng opened this issue Mar 17, 2016 · 3 comments
Closed

NMS: Finne ut av hvorfor 2-3 pings droppes hver gang. #38

KristianLyng opened this issue Mar 17, 2016 · 3 comments
Assignees
Milestone

Comments

@KristianLyng
Copy link
Member

Håper det er grunnet testmiljøet.

@KristianLyng KristianLyng added this to the tg16 milestone Mar 17, 2016
@KristianLyng KristianLyng self-assigned this Mar 17, 2016
@KristianLyng KristianLyng modified the milestones: tg16, Mandag Mar 17, 2016
@KristianLyng KristianLyng modified the milestones: Mandag, Tirsdag Mar 21, 2016
@KristianLyng
Copy link
Member Author

Sesse har vel egentlig alt lokalisert dette:

Se http://pastebin.com/raw/QD4QU2j9

--- liboping-1.8.0.orig/src/liboping.c
+++ liboping-1.8.0/src/liboping.c
@@ -267,7 +267,7 @@ static uint16_t ping_icmp4_checksum (cha
        return (ret);
 }

-static pinghost_t *ping_receive_ipv4 (pingobj_t *obj, char *buffer,
+static pinghost_t *ping_receive_ipv4 (pingobj_t *obj, struct sockaddr_in *addr, char *buffer,
                size_t buffer_len)
 {
        struct ip *ip_hdr;
@@ -343,6 +343,9 @@ static pinghost_t *ping_receive_ipv4 (pi
                if (((ptr->sequence - 1) & 0xFFFF) != seq)
                        continue;

+               if (((struct sockaddr_in *)ptr->addr)->sin_addr.s_addr != addr->sin_addr.s_addr)
+                       continue;
+
                dprintf ("Match found: hostname = %s, ident = 0x%04"PRIx16", "
                                "seq = %"PRIu16"\n",
                                ptr->hostname, ident, seq);
@@ -379,7 +382,7 @@ static pinghost_t *ping_receive_ipv4 (pi
 # endif
 #endif

-static pinghost_t *ping_receive_ipv6 (pingobj_t *obj, char *buffer,
+static pinghost_t *ping_receive_ipv6 (pingobj_t *obj, struct sockaddr_in6 *addr, char *buffer,
                size_t buffer_len)
 {
        struct icmp6_hdr *icmp_hdr;
@@ -430,6 +433,10 @@ static pinghost_t *ping_receive_ipv6 (pi
                if (((ptr->sequence - 1) & 0xFFFF) != seq)
                        continue;

+               if (memcmp(&((struct sockaddr_in6 *)ptr->addr)->sin6_addr,
+                          &addr->sin6_addr, sizeof(struct sockaddr_in6)) != 0)
+                       continue;
+
                dprintf ("Match found: hostname = %s, ident = 0x%04"PRIx16", "
                                "seq = %"PRIu16"\n",
                                ptr->hostname, ident, seq);
@@ -591,13 +598,13 @@ static int ping_receive_one (pingobj_t *

        if (ph->addrfamily == AF_INET)
        {
-               host = ping_receive_ipv4 (obj, payload_buffer, payload_buffer_len);
+               host = ping_receive_ipv4 (obj, (struct sockaddr_in *)ph->addr, payload_buffer, payload_buffer_len);
                if (host == NULL)
                        return (-1);
        }
        else if (ph->addrfamily == AF_INET6)
        {
-               host = ping_receive_ipv6 (obj, payload_buffer, payload_buffer_len);
+               host = ping_receive_ipv6 (obj, (struct sockaddr_in6 *)ph->addr, payload_buffer, payload_buffer_len);
                if (host == NULL)
                        return (-1);
        }

@KristianLyng
Copy link
Member Author

Usikker på om dette er samme. Orginalproblemet var falske negativer, denne patchen er mest for falske positiver...

@KristianLyng
Copy link
Member Author

This issue was moved to gathering/gondul#7

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants