diff for duplicates of <20181211202520.16799-8-deepa.kernel@gmail.com> diff --git a/a/1.txt b/N1/1.txt index 779cd27..3ff710a 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -42,14 +42,14 @@ index 352e3dc0b3d9..8b9f6f7f8087 100644 #if !defined(__KERNEL__) - #if __BITS_PER_LONG == 64 + #if __BITS_PER_LONG = 64 #define SO_TIMESTAMP SO_TIMESTAMP_OLD #define SO_TIMESTAMPNS SO_TIMESTAMPNS_OLD +#define SO_TIMESTAMPING SO_TIMESTAMPING_OLD #else - #define SO_TIMESTAMP (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW) - #define SO_TIMESTAMPNS (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW) -+#define SO_TIMESTAMPING (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW) + #define SO_TIMESTAMP (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW) + #define SO_TIMESTAMPNS (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW) ++#define SO_TIMESTAMPING (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW) #endif -#define SO_TIMESTAMPING SO_TIMESTAMPING_OLD @@ -69,14 +69,14 @@ index d1752e3f1248..9fc80c5d54e4 100644 #if !defined(__KERNEL__) - #if __BITS_PER_LONG == 64 + #if __BITS_PER_LONG = 64 #define SO_TIMESTAMP SO_TIMESTAMP_OLD #define SO_TIMESTAMPNS SO_TIMESTAMPNS_OLD +#define SO_TIMESTAMPING SO_TIMESTAMPING_OLD #else - #define SO_TIMESTAMP (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW) - #define SO_TIMESTAMPNS (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW) -+#define SO_TIMESTAMPING (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW) + #define SO_TIMESTAMP (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW) + #define SO_TIMESTAMPNS (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW) ++#define SO_TIMESTAMPING (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW) #endif -#define SO_TIMESTAMPING SO_TIMESTAMPING_OLD @@ -96,14 +96,14 @@ index 0a45b668abd1..82f1c9447d6b 100644 #if !defined(__KERNEL__) - #if __BITS_PER_LONG == 64 + #if __BITS_PER_LONG = 64 #define SO_TIMESTAMP SO_TIMESTAMP_OLD #define SO_TIMESTAMPNS SO_TIMESTAMPNS_OLD +#define SO_TIMESTAMPING SO_TIMESTAMPING_OLD #else - #define SO_TIMESTAMP (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW) - #define SO_TIMESTAMPNS (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW) -+#define SO_TIMESTAMPING (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW) + #define SO_TIMESTAMP (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW) + #define SO_TIMESTAMPNS (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW) ++#define SO_TIMESTAMPING (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW) #endif -#define SO_TIMESTAMPING SO_TIMESTAMPING_OLD @@ -127,14 +127,14 @@ index dc8527cae5a7..5bdbb25c28d2 100644 #if !defined(__KERNEL__) - #if __BITS_PER_LONG == 64 + #if __BITS_PER_LONG = 64 #define SO_TIMESTAMP SO_TIMESTAMP_OLD #define SO_TIMESTAMPNS SO_TIMESTAMPNS_OLD +#define SO_TIMESTAMPING SO_TIMESTAMPING_OLD #else - #define SO_TIMESTAMP (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW) - #define SO_TIMESTAMPNS (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW) -+#define SO_TIMESTAMPING (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW) + #define SO_TIMESTAMP (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW) + #define SO_TIMESTAMPNS (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW) ++#define SO_TIMESTAMPING (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW) #endif -#define SO_TIMESTAMPING SO_TIMESTAMPING_OLD @@ -157,7 +157,7 @@ index 8b571e9b9f76..372fd77698a2 100644 +extern void put_cmsg_scm_timestamping(struct msghdr *msg, struct scm_timestamping_internal *tss); + /* The __sys_...msg variants allow MSG_CMSG_COMPAT iff - * forbid_cmsg_compat==false + * forbid_cmsg_compat=false */ diff --git a/include/uapi/asm-generic/socket.h b/include/uapi/asm-generic/socket.h index 0b0fae6b57a9..2fdfb6126246 100644 @@ -177,9 +177,9 @@ index 0b0fae6b57a9..2fdfb6126246 100644 #define SO_TIMESTAMPNS SO_TIMESTAMPNS_OLD +#define SO_TIMESTAMPING SO_TIMESTAMPING_OLD #else - #define SO_TIMESTAMP (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW) - #define SO_TIMESTAMPNS (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW) -+#define SO_TIMESTAMPING (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW) + #define SO_TIMESTAMP (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW) + #define SO_TIMESTAMPNS (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW) ++#define SO_TIMESTAMPING (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW) #endif -#define SO_TIMESTAMPING SO_TIMESTAMPING_OLD @@ -257,7 +257,7 @@ index 1f4db404782c..2a04f568ab47 100644 +static int setsockopt_timestamping(struct sock *sk, int type, int val) +{ -+ if (type == SO_TIMESTAMPING_NEW) ++ if (type = SO_TIMESTAMPING_NEW) + sock_set_flag(sk, SOCK_TSTAMP_NEW); + + if (val & ~SOF_TIMESTAMPING_MASK) @@ -265,8 +265,8 @@ index 1f4db404782c..2a04f568ab47 100644 + + if (val & SOF_TIMESTAMPING_OPT_ID && + !(sk->sk_tsflags & SOF_TIMESTAMPING_OPT_ID)) { -+ if (sk->sk_protocol == IPPROTO_TCP && -+ sk->sk_type == SOCK_STREAM) { ++ if (sk->sk_protocol = IPPROTO_TCP && ++ sk->sk_type = SOCK_STREAM) { + if ((1 << sk->sk_state) & + (TCPF_CLOSE | TCPF_LISTEN)) + return -EINVAL; @@ -285,7 +285,7 @@ index 1f4db404782c..2a04f568ab47 100644 + sock_enable_timestamp(sk, + SOCK_TIMESTAMPING_RX_SOFTWARE); + } else { -+ if (type == SO_TIMESTAMPING_NEW) ++ if (type = SO_TIMESTAMPING_NEW) + sock_reset_flag(sk, SOCK_TSTAMP_NEW); + sock_disable_timestamp(sk, + (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE)); @@ -308,8 +308,8 @@ index 1f4db404782c..2a04f568ab47 100644 - - if (val & SOF_TIMESTAMPING_OPT_ID && - !(sk->sk_tsflags & SOF_TIMESTAMPING_OPT_ID)) { -- if (sk->sk_protocol == IPPROTO_TCP && -- sk->sk_type == SOCK_STREAM) { +- if (sk->sk_protocol = IPPROTO_TCP && +- sk->sk_type = SOCK_STREAM) { - if ((1 << sk->sk_state) & - (TCPF_CLOSE | TCPF_LISTEN)) { - ret = -EINVAL; @@ -448,8 +448,7 @@ index 96fe831b79ad..d0c018645900 100644 + struct scm_timestamping_internal tss; + int empty = 1, false_tstamp = 0; - struct skb_shared_hwtstamps *shhwtstamps = - skb_hwtstamps(skb); + struct skb_shared_hwtstamps *shhwtstamps skb_hwtstamps(skb); @@ -755,20 +758,22 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk, memset(&tss, 0, sizeof(tss)); diff --git a/a/content_digest b/N1/content_digest index ce45d22..7d1723c 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,7 +1,7 @@ "ref\020181211202520.16799-1-deepa.kernel@gmail.com\0" "From\0Deepa Dinamani <deepa.kernel@gmail.com>\0" "Subject\0[PATCH v2 7/8] socket: Add SO_TIMESTAMPING_NEW\0" - "Date\0Tue, 11 Dec 2018 12:25:19 -0800\0" + "Date\0Tue, 11 Dec 2018 20:25:19 +0000\0" "To\0davem@davemloft.net" " linux-kernel@vger.kernel.org\0" "Cc\0netdev@vger.kernel.org" @@ -65,14 +65,14 @@ " \n" " #if !defined(__KERNEL__)\n" " \n" - " #if __BITS_PER_LONG == 64\n" + " #if __BITS_PER_LONG = 64\n" " #define SO_TIMESTAMP\t\tSO_TIMESTAMP_OLD\n" " #define SO_TIMESTAMPNS\t\tSO_TIMESTAMPNS_OLD\n" "+#define SO_TIMESTAMPING\t\tSO_TIMESTAMPING_OLD\n" " #else\n" - " #define SO_TIMESTAMP (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW)\n" - " #define SO_TIMESTAMPNS (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW)\n" - "+#define SO_TIMESTAMPING (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW)\n" + " #define SO_TIMESTAMP (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW)\n" + " #define SO_TIMESTAMPNS (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW)\n" + "+#define SO_TIMESTAMPING (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW)\n" " #endif\n" " \n" "-#define SO_TIMESTAMPING SO_TIMESTAMPING_OLD\n" @@ -92,14 +92,14 @@ " \n" " #if !defined(__KERNEL__)\n" " \n" - " #if __BITS_PER_LONG == 64\n" + " #if __BITS_PER_LONG = 64\n" " #define SO_TIMESTAMP\t\tSO_TIMESTAMP_OLD\n" " #define SO_TIMESTAMPNS\t\tSO_TIMESTAMPNS_OLD\n" "+#define SO_TIMESTAMPING\t\tSO_TIMESTAMPING_OLD\n" " #else\n" - " #define SO_TIMESTAMP (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW)\n" - " #define SO_TIMESTAMPNS (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW)\n" - "+#define SO_TIMESTAMPING (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW)\n" + " #define SO_TIMESTAMP (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW)\n" + " #define SO_TIMESTAMPNS (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW)\n" + "+#define SO_TIMESTAMPING (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW)\n" " #endif\n" " \n" "-#define SO_TIMESTAMPING SO_TIMESTAMPING_OLD\n" @@ -119,14 +119,14 @@ " \n" " #if !defined(__KERNEL__)\n" " \n" - " #if __BITS_PER_LONG == 64\n" + " #if __BITS_PER_LONG = 64\n" " #define SO_TIMESTAMP\t\tSO_TIMESTAMP_OLD\n" " #define SO_TIMESTAMPNS\t\tSO_TIMESTAMPNS_OLD\n" "+#define SO_TIMESTAMPING\t\tSO_TIMESTAMPING_OLD\n" " #else\n" - " #define SO_TIMESTAMP (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW)\n" - " #define SO_TIMESTAMPNS (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW)\n" - "+#define SO_TIMESTAMPING (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW)\n" + " #define SO_TIMESTAMP (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW)\n" + " #define SO_TIMESTAMPNS (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW)\n" + "+#define SO_TIMESTAMPING (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW)\n" " #endif\n" " \n" "-#define SO_TIMESTAMPING SO_TIMESTAMPING_OLD\n" @@ -150,14 +150,14 @@ " \n" " #if !defined(__KERNEL__)\n" " \n" - " #if __BITS_PER_LONG == 64\n" + " #if __BITS_PER_LONG = 64\n" " #define SO_TIMESTAMP\t\tSO_TIMESTAMP_OLD\n" " #define SO_TIMESTAMPNS\t\tSO_TIMESTAMPNS_OLD\n" "+#define SO_TIMESTAMPING\t\tSO_TIMESTAMPING_OLD\n" " #else\n" - " #define SO_TIMESTAMP (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW)\n" - " #define SO_TIMESTAMPNS (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW)\n" - "+#define SO_TIMESTAMPING (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW)\n" + " #define SO_TIMESTAMP (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW)\n" + " #define SO_TIMESTAMPNS (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW)\n" + "+#define SO_TIMESTAMPING (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW)\n" " #endif\n" " \n" "-#define SO_TIMESTAMPING SO_TIMESTAMPING_OLD\n" @@ -180,7 +180,7 @@ "+extern void put_cmsg_scm_timestamping(struct msghdr *msg, struct scm_timestamping_internal *tss);\n" "+\n" " /* The __sys_...msg variants allow MSG_CMSG_COMPAT iff\n" - " * forbid_cmsg_compat==false\n" + " * forbid_cmsg_compat=false\n" " */\n" "diff --git a/include/uapi/asm-generic/socket.h b/include/uapi/asm-generic/socket.h\n" "index 0b0fae6b57a9..2fdfb6126246 100644\n" @@ -200,9 +200,9 @@ " #define SO_TIMESTAMPNS\t\tSO_TIMESTAMPNS_OLD\n" "+#define SO_TIMESTAMPING\t\tSO_TIMESTAMPING_OLD\n" " #else\n" - " #define SO_TIMESTAMP (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW)\n" - " #define SO_TIMESTAMPNS (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW)\n" - "+#define SO_TIMESTAMPING (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW)\n" + " #define SO_TIMESTAMP (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW)\n" + " #define SO_TIMESTAMPNS (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW)\n" + "+#define SO_TIMESTAMPING (sizeof(time_t) = sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW)\n" " #endif\n" " \n" "-#define SO_TIMESTAMPING SO_TIMESTAMPING_OLD\n" @@ -280,7 +280,7 @@ " \n" "+static int setsockopt_timestamping(struct sock *sk, int type, int val)\n" "+{\n" - "+\tif (type == SO_TIMESTAMPING_NEW)\n" + "+\tif (type = SO_TIMESTAMPING_NEW)\n" "+\t\tsock_set_flag(sk, SOCK_TSTAMP_NEW);\n" "+\n" "+\tif (val & ~SOF_TIMESTAMPING_MASK)\n" @@ -288,8 +288,8 @@ "+\n" "+\tif (val & SOF_TIMESTAMPING_OPT_ID &&\n" "+\t !(sk->sk_tsflags & SOF_TIMESTAMPING_OPT_ID)) {\n" - "+\t\tif (sk->sk_protocol == IPPROTO_TCP &&\n" - "+\t\t sk->sk_type == SOCK_STREAM) {\n" + "+\t\tif (sk->sk_protocol = IPPROTO_TCP &&\n" + "+\t\t sk->sk_type = SOCK_STREAM) {\n" "+\t\t\tif ((1 << sk->sk_state) &\n" "+\t\t\t (TCPF_CLOSE | TCPF_LISTEN))\n" "+\t\t\t\treturn -EINVAL;\n" @@ -308,7 +308,7 @@ "+\t\tsock_enable_timestamp(sk,\n" "+\t\t\t\t SOCK_TIMESTAMPING_RX_SOFTWARE);\n" "+\t} else {\n" - "+\t\tif (type == SO_TIMESTAMPING_NEW)\n" + "+\t\tif (type = SO_TIMESTAMPING_NEW)\n" "+\t\t\tsock_reset_flag(sk, SOCK_TSTAMP_NEW);\n" "+\t\tsock_disable_timestamp(sk,\n" "+\t\t\t\t (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE));\n" @@ -331,8 +331,8 @@ "-\n" "-\t\tif (val & SOF_TIMESTAMPING_OPT_ID &&\n" "-\t\t !(sk->sk_tsflags & SOF_TIMESTAMPING_OPT_ID)) {\n" - "-\t\t\tif (sk->sk_protocol == IPPROTO_TCP &&\n" - "-\t\t\t sk->sk_type == SOCK_STREAM) {\n" + "-\t\t\tif (sk->sk_protocol = IPPROTO_TCP &&\n" + "-\t\t\t sk->sk_type = SOCK_STREAM) {\n" "-\t\t\t\tif ((1 << sk->sk_state) &\n" "-\t\t\t\t (TCPF_CLOSE | TCPF_LISTEN)) {\n" "-\t\t\t\t\tret = -EINVAL;\n" @@ -471,8 +471,7 @@ "+\tstruct scm_timestamping_internal tss;\n" "+\n" " \tint empty = 1, false_tstamp = 0;\n" - " \tstruct skb_shared_hwtstamps *shhwtstamps =\n" - " \t\tskb_hwtstamps(skb);\n" + " \tstruct skb_shared_hwtstamps *shhwtstamps \t\tskb_hwtstamps(skb);\n" "@@ -755,20 +758,22 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,\n" " \n" " \tmemset(&tss, 0, sizeof(tss));\n" @@ -503,4 +502,4 @@ "-- \n" 2.17.1 -19cbc558e63db681584346ec4e212d89914a4b6109140d3a518858e44c194ce6 +faa55294cc57bc12fed5c0720ab768841ad2cc3aa212cc2f6d1ccb54560bf02b
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.