Martin KaFai Lau
2dbb9b9e6d
bpf: Introduce BPF_PROG_TYPE_SK_REUSEPORT
...
This patch adds a BPF_PROG_TYPE_SK_REUSEPORT which can select
a SO_REUSEPORT sk from a BPF_MAP_TYPE_REUSEPORT_ARRAY. Like other
non SK_FILTER/CGROUP_SKB program, it requires CAP_SYS_ADMIN.
BPF_PROG_TYPE_SK_REUSEPORT introduces "struct sk_reuseport_kern"
to store the bpf context instead of using the skb->cb[48].
At the SO_REUSEPORT sk lookup time, it is in the middle of transiting
from a lower layer (ipv4/ipv6) to a upper layer (udp/tcp). At this
point, it is not always clear where the bpf context can be appended
in the skb->cb[48] to avoid saving-and-restoring cb[]. Even putting
aside the difference between ipv4-vs-ipv6 and udp-vs-tcp. It is not
clear if the lower layer is only ipv4 and ipv6 in the future and
will it not touch the cb[] again before transiting to the upper
layer.
For example, in udp_gro_receive(), it uses the 48 byte NAPI_GRO_CB
instead of IP[6]CB and it may still modify the cb[] after calling
the udp[46]_lib_lookup_skb(). Because of the above reason, if
sk->cb is used for the bpf ctx, saving-and-restoring is needed
and likely the whole 48 bytes cb[] has to be saved and restored.
Instead of saving, setting and restoring the cb[], this patch opts
to create a new "struct sk_reuseport_kern" and setting the needed
values in there.
The new BPF_PROG_TYPE_SK_REUSEPORT and "struct sk_reuseport_(kern|md)"
will serve all ipv4/ipv6 + udp/tcp combinations. There is no protocol
specific usage at this point and it is also inline with the current
sock_reuseport.c implementation (i.e. no protocol specific requirement).
In "struct sk_reuseport_md", this patch exposes data/data_end/len
with semantic similar to other existing usages. Together
with "bpf_skb_load_bytes()" and "bpf_skb_load_bytes_relative()",
the bpf prog can peek anywhere in the skb. The "bind_inany" tells
the bpf prog that the reuseport group is bind-ed to a local
INANY address which cannot be learned from skb.
The new "bind_inany" is added to "struct sock_reuseport" which will be
used when running the new "BPF_PROG_TYPE_SK_REUSEPORT" bpf prog in order
to avoid repeating the "bind INANY" test on
"sk_v6_rcv_saddr/sk->sk_rcv_saddr" every time a bpf prog is run. It can
only be properly initialized when a "sk->sk_reuseport" enabled sk is
adding to a hashtable (i.e. during "reuseport_alloc()" and
"reuseport_add_sock()").
The new "sk_select_reuseport()" is the main helper that the
bpf prog will use to select a SO_REUSEPORT sk. It is the only function
that can use the new BPF_MAP_TYPE_REUSEPORT_ARRAY. As mentioned in
the earlier patch, the validity of a selected sk is checked in
run time in "sk_select_reuseport()". Doing the check in
verification time is difficult and inflexible (consider the map-in-map
use case). The runtime check is to compare the selected sk's reuseport_id
with the reuseport_id that we want. This helper will return -EXXX if the
selected sk cannot serve the incoming request (e.g. reuseport_id
not match). The bpf prog can decide if it wants to do SK_DROP as its
discretion.
When the bpf prog returns SK_PASS, the kernel will check if a
valid sk has been selected (i.e. "reuse_kern->selected_sk != NULL").
If it does , it will use the selected sk. If not, the kernel
will select one from "reuse->socks[]" (as before this patch).
The SK_DROP and SK_PASS handling logic will be in the next patch.
Signed-off-by: Martin KaFai Lau <kafai@fb.com >
Acked-by: Alexei Starovoitov <ast@kernel.org >
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net >
2018-08-11 01:58:46 +02:00
..
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2018-01-16 15:11:32 +01:00
2017-11-02 11:20:11 +01:00
2018-02-23 05:28:41 -05:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2018-08-03 21:12:19 +02:00
2017-11-02 11:19:54 +01:00
2018-04-24 10:29:18 +02:00
2017-11-02 11:20:11 +01:00
2018-05-06 23:33:03 +02:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 10:04:46 -07:00
2017-11-02 11:19:54 +01:00
2018-07-19 23:26:01 -07:00
2018-02-21 13:15:33 -05:00
2018-06-15 17:24:40 +09:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2018-07-22 12:04:51 -07:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2018-01-13 10:44:56 +00:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2018-06-07 15:40:37 -07:00
2017-11-02 11:20:11 +01:00
2018-06-07 17:34:39 -07:00
2018-06-07 17:34:39 -07:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2018-02-27 13:02:54 +01:00
2018-03-14 10:15:34 +01:00
2017-11-02 11:19:54 +01:00
2017-11-24 16:22:58 -07:00
2017-11-02 11:19:54 +01:00
2017-11-27 13:05:09 -08:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2018-03-30 14:16:24 -06:00
2017-11-02 11:20:11 +01:00
2018-01-18 22:12:38 +01:00
2018-03-08 02:22:34 +01:00
2018-08-11 01:58:46 +02:00
2018-05-23 13:23:40 -04:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2018-07-20 10:25:48 +02:00
2018-01-22 16:08:21 +01:00
2018-05-31 11:35:24 +02:00
2018-07-27 10:40:16 +02:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2018-02-14 13:23:51 -05:00
2018-02-14 13:23:51 -05:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2018-05-01 14:25:37 -04:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2018-04-11 10:28:38 -07:00
2017-11-02 11:19:54 +01:00
2017-11-17 13:20:41 -08:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2018-07-29 12:53:54 -07:00
2017-11-02 11:19:54 +01:00
2018-07-12 17:37:13 -07:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2018-04-04 12:12:38 -04:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2018-05-14 13:46:04 -04:00
2017-11-02 11:19:54 +01:00
2018-07-04 22:30:28 +09:00
2018-01-25 21:39:43 -05:00
2018-08-07 12:15:03 -07:00
2018-02-01 16:28:55 -05:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-14 14:13:11 -08:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2018-02-28 22:44:43 -05:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2018-06-05 15:15:32 -07:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2018-03-20 17:11:44 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2018-01-23 07:39:20 -07:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-12-03 20:47:33 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2018-05-29 10:12:45 -04:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2018-03-23 11:31:58 -04:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2018-04-23 11:10:33 -04:00
2018-07-29 12:57:26 -07:00
2017-11-02 11:19:54 +01:00
2018-01-22 15:40:16 -05:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2018-01-17 15:32:10 -05:00
2017-12-15 12:34:00 -05:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2018-06-08 00:18:02 +02:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2018-06-29 11:32:55 +09:00
2017-11-04 09:26:51 +09:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2018-01-02 13:54:04 -05:00
2018-02-14 11:16:28 +01:00
2017-12-08 13:54:43 -08:00
2018-01-09 16:40:30 -08:00
2017-11-02 11:19:54 +01:00
2017-11-04 09:26:51 +09:00
2017-11-02 11:19:54 +01:00
2018-07-29 12:37:06 -07:00
2017-11-02 11:19:54 +01:00
2018-02-26 09:49:21 -06:00
2018-02-27 07:42:51 -06:00
2018-02-27 07:42:51 -06:00
2017-11-02 11:19:54 +01:00
2017-11-04 09:26:51 +09:00
2017-11-11 15:13:02 +09:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-14 14:13:11 -08:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-17 16:10:04 -08:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2018-06-07 17:34:37 -07:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2018-03-15 17:27:51 -04:00
2017-11-02 11:19:54 +01:00
2018-06-12 15:06:35 +02:00
2018-08-03 10:03:57 -07:00
2018-02-13 11:23:24 -05:00
2018-01-05 08:50:12 -07:00
2017-11-02 11:19:54 +01:00
2018-04-20 09:15:18 -04:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-28 16:54:00 +01:00
2017-11-02 11:19:54 +01:00
2017-11-13 15:38:16 +00:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2018-02-26 10:14:46 -05:00
2017-11-02 11:20:11 +01:00
2018-02-05 21:35:03 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2018-07-24 14:41:08 -07:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2018-07-13 14:21:16 -07:00
2018-03-17 14:45:23 -06:00
2018-04-11 10:28:37 -07:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2018-06-20 19:10:06 -06:00
2018-03-05 10:43:37 -05:00
2018-02-01 21:27:22 -08:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2018-07-09 16:31:28 -07:00
2017-11-02 11:20:11 +01:00
2018-07-29 12:37:06 -07:00
2017-11-02 11:20:11 +01:00
2018-01-08 18:01:08 +01:00
2018-08-03 21:15:09 +02:00
2018-01-08 18:01:08 +01:00
2018-01-11 13:14:20 +01:00
2018-01-11 13:14:20 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-10 00:03:39 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2018-01-14 23:06:30 -05:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2018-06-30 21:08:12 +09:00
2017-11-02 11:19:54 +01:00
2018-01-16 16:47:29 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2018-05-09 16:37:05 -04:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2018-07-08 11:13:25 +09:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2018-06-07 12:45:58 -07:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2018-07-25 11:46:21 +02:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2018-08-07 12:22:15 -07:00
2018-07-24 14:44:00 -07:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2018-05-24 22:55:07 -04:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2018-06-15 18:10:01 -03:00
2017-11-02 11:19:54 +01:00
2018-02-06 22:53:56 +00:00
2018-05-31 00:13:56 +08:00
2017-11-02 11:20:11 +01:00
2018-02-21 16:56:03 -08:00
2018-03-20 03:17:41 +02:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-04 09:26:51 +09:00
2017-08-14 11:53:34 +02:00
2017-11-02 11:19:54 +01:00
2018-04-14 11:59:31 -04:00
2017-11-02 11:19:54 +01:00
2018-07-23 21:17:44 -07:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2018-06-03 17:37:16 -07:00
2018-07-10 22:18:52 +02:00
2017-11-02 11:19:54 +01:00
2018-07-23 20:44:12 -07:00
2017-11-24 10:18:41 +00:00
2017-11-02 11:19:54 +01:00
2018-01-10 11:30:31 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2018-07-04 11:36:54 +09:00
2017-11-02 11:20:11 +01:00
2018-05-05 00:51:44 +02:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2018-05-24 11:57:36 +02:00
2017-11-16 10:49:00 +09:00
2017-11-02 11:20:11 +01:00
2018-04-11 10:28:37 -07:00
2018-03-09 11:01:19 -08:00
2017-11-13 21:05:31 -08:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2018-04-11 10:28:37 -07:00
2017-11-02 11:19:54 +01:00
2018-04-26 19:51:12 -05:00
2018-07-25 22:25:53 -07:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2018-08-05 17:16:46 -07:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-07 10:32:44 +01:00
2018-03-28 18:47:18 +03:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-12-18 23:08:11 -06:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2018-04-16 11:26:49 +02:00
2017-11-02 11:19:54 +01:00
2018-06-18 21:02:52 -04:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2018-08-01 09:56:10 -07:00
2017-12-21 17:23:52 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2018-05-02 16:11:12 +02:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2018-04-20 11:04:05 -04:00
2018-06-30 21:05:42 +09:00
2018-03-22 14:43:35 -04:00
2018-04-27 11:05:41 -04:00
2018-04-23 11:10:33 -04:00
2017-11-02 11:20:11 +01:00
2018-05-24 18:38:51 +02:00
2017-11-02 11:19:54 +01:00
2018-05-26 09:16:44 +02:00
2017-11-02 11:20:11 +01:00
2018-04-26 15:08:04 -04:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-12-12 13:16:07 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2018-02-06 18:32:44 -08:00
2018-01-04 06:41:47 -05:00
2017-11-02 11:20:11 +01:00
2018-03-22 06:32:15 -04:00
2017-11-02 11:20:11 +01:00
2018-02-26 08:15:50 -05:00
2017-11-02 11:20:11 +01:00
2017-12-18 16:12:21 +01:00
2017-12-18 16:12:21 +01:00
2017-12-18 16:12:21 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2018-03-26 13:22:58 -06:00
2018-08-06 10:41:04 -07:00
2018-03-22 06:26:05 -04:00
2018-04-24 21:44:01 +03:00
2018-06-12 04:59:29 +03:00
2018-05-14 11:01:29 +02:00
2018-05-28 22:59:54 -04:00
2017-08-24 09:57:28 +02:00
2017-11-26 04:24:48 +09:00
2017-11-02 11:20:11 +01:00
2018-05-14 13:46:04 -04:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:19:54 +01:00
2017-11-03 16:34:00 -07:00
2017-11-02 11:19:54 +01:00
2017-11-13 10:41:25 -08:00
2018-06-23 16:07:15 +02:00
2017-11-02 11:20:11 +01:00
2017-11-02 11:19:54 +01:00
2017-11-02 11:20:11 +01:00