diff options
author | Lorenzo Colitti <lorenzo@google.com> | 2014-06-17 05:10:30 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-06-17 03:59:24 +0000 |
commit | 1c7c426ab377c3a005a36d612ebbb16de86fb7d4 (patch) | |
tree | d1205ba8d73113c5ddd6d475c5ef7661534affa2 | |
parent | 44a65406c9d97908145fd03deeaf531f4645ad6f (diff) | |
parent | 3d667ccb6c8aa805006cfbe2bc793a4ee1ae0047 (diff) | |
download | iputils-1c7c426ab377c3a005a36d612ebbb16de86fb7d4.tar.gz |
Merge "Make ping use socket marks properly."android-wear-5.0.0_r1android-l-preview_r2android-cts-5.1_r9android-cts-5.1_r8android-cts-5.1_r7android-cts-5.1_r6android-cts-5.1_r5android-cts-5.1_r4android-cts-5.1_r3android-cts-5.1_r28android-cts-5.1_r27android-cts-5.1_r26android-cts-5.1_r25android-cts-5.1_r24android-cts-5.1_r23android-cts-5.1_r22android-cts-5.1_r21android-cts-5.1_r20android-cts-5.1_r2android-cts-5.1_r19android-cts-5.1_r18android-cts-5.1_r17android-cts-5.1_r16android-cts-5.1_r15android-cts-5.1_r14android-cts-5.1_r13android-cts-5.1_r10android-cts-5.1_r1android-cts-5.0_r9android-cts-5.0_r8android-cts-5.0_r7android-cts-5.0_r6android-cts-5.0_r5android-cts-5.0_r4android-cts-5.0_r3android-5.1.1_r9android-5.1.1_r8android-5.1.1_r7android-5.1.1_r6android-5.1.1_r4android-5.1.1_r38android-5.1.1_r37android-5.1.1_r36android-5.1.1_r35android-5.1.1_r34android-5.1.1_r33android-5.1.1_r30android-5.1.1_r3android-5.1.1_r29android-5.1.1_r26android-5.1.1_r25android-5.1.1_r24android-5.1.1_r23android-5.1.1_r20android-5.1.1_r2android-5.1.1_r19android-5.1.1_r18android-5.1.1_r16android-5.1.1_r15android-5.1.1_r14android-5.1.1_r13android-5.1.1_r10android-5.1.1_r1android-5.1.0_r5android-5.1.0_r4android-5.1.0_r3android-5.1.0_r1android-5.0.2_r3android-5.0.2_r1android-5.0.1_r1android-5.0.0_r7android-5.0.0_r6android-5.0.0_r5.1android-5.0.0_r5android-5.0.0_r4android-5.0.0_r3android-5.0.0_r2android-5.0.0_r1lollipop-wear-releaselollipop-releaselollipop-mr1-releaselollipop-mr1-fi-releaselollipop-mr1-devlollipop-mr1-cts-releaselollipop-devlollipop-cts-releasel-preview
-rw-r--r-- | ping.c | 3 | ||||
-rw-r--r-- | ping6.c | 3 | ||||
-rw-r--r-- | ping_common.c | 35 | ||||
-rw-r--r-- | ping_common.h | 1 |
4 files changed, 27 insertions, 15 deletions
@@ -360,6 +360,9 @@ main(int argc, char **argv) dst.sin_port = htons(1025); if (nroute) dst.sin_addr.s_addr = route[0]; + + sock_setmark(probe_fd); + if (connect(probe_fd, (struct sockaddr*)&dst, sizeof(dst)) == -1) { if (errno == EACCES) { if (broadcast_pings == 0) { @@ -988,6 +988,9 @@ int main(int argc, char *argv[]) disable_capability_raw(); } firsthop.sin6_port = htons(1025); + + sock_setmark(probe_fd); + if (connect(probe_fd, (struct sockaddr*)&firsthop, sizeof(firsthop)) == -1) { perror("connect"); exit(2); diff --git a/ping_common.c b/ping_common.c index 9c0e8f5..d58d3c4 100644 --- a/ping_common.c +++ b/ping_common.c @@ -605,6 +605,25 @@ void sock_setbufs(int icmp_sock, int alloc) } } +void sock_setmark(int icmp_sock) { +#ifdef SO_MARK + if (options & F_MARK) { + int ret; + + enable_capability_admin(); + ret = setsockopt(icmp_sock, SOL_SOCKET, SO_MARK, &mark, sizeof(mark)); + disable_capability_admin(); + + if (ret == -1) { + /* we probably dont wanna exit since old kernels + * dont support mark .. + */ + fprintf(stderr, "Warning: Failed to set mark %d\n", mark); + } + } +#endif +} + /* Protocol independent setup and parameter checks. */ void setup(int icmp_sock) @@ -639,22 +658,8 @@ void setup(int icmp_sock) fprintf(stderr, "Warning: no SO_TIMESTAMP support, falling back to SIOCGSTAMP\n"); } #endif -#ifdef SO_MARK - if (options & F_MARK) { - int ret; - - enable_capability_admin(); - ret = setsockopt(icmp_sock, SOL_SOCKET, SO_MARK, &mark, sizeof(mark)); - disable_capability_admin(); - if (ret == -1) { - /* we probably dont wanna exit since old kernels - * dont support mark .. - */ - fprintf(stderr, "Warning: Failed to set mark %d\n", mark); - } - } -#endif + sock_setmark(icmp_sock); /* Set some SNDTIMEO to prevent blocking forever * on sends, when device is too slow or stalls. Just put limit diff --git a/ping_common.h b/ping_common.h index bc59700..7158555 100644 --- a/ping_common.h +++ b/ping_common.h @@ -284,6 +284,7 @@ extern int is_ours(uint16_t id); extern int pinger(void); extern void sock_setbufs(int icmp_sock, int alloc); +extern void sock_setmark(int icmp_sock); extern void setup(int icmp_sock); extern void main_loop(int icmp_sock, __u8 *buf, int buflen) __attribute__((noreturn)); extern void finish(void) __attribute__((noreturn)); |