aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLorenzo Colitti <lorenzo@google.com>2014-06-17 05:10:30 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-06-17 03:59:24 +0000
commit1c7c426ab377c3a005a36d612ebbb16de86fb7d4 (patch)
treed1205ba8d73113c5ddd6d475c5ef7661534affa2
parent44a65406c9d97908145fd03deeaf531f4645ad6f (diff)
parent3d667ccb6c8aa805006cfbe2bc793a4ee1ae0047 (diff)
downloadiputils-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.c3
-rw-r--r--ping6.c3
-rw-r--r--ping_common.c35
-rw-r--r--ping_common.h1
4 files changed, 27 insertions, 15 deletions
diff --git a/ping.c b/ping.c
index 23613c8..ec4e040 100644
--- a/ping.c
+++ b/ping.c
@@ -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) {
diff --git a/ping6.c b/ping6.c
index 2f8dddc..baa0768 100644
--- a/ping6.c
+++ b/ping6.c
@@ -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));