@cryptotaxi247 / kubo / commits / 8baec1014

feat: add webtransport as an optin transport

Jorropo committed Sep 21, 2022 at 23:52 UTC 8baec10146c2029a7fdd29583e2164e42a330551
8 files changed +85 -19
config/swarm.go
+2
@@ -104,6 +104,8 @@ type Transports struct {
104 TCP Flag `json:",omitempty"`
105 Websocket Flag `json:",omitempty"`
106 Relay Flag `json:",omitempty"`
107 + // except WebTransport which is experimental and optin.
108 + WebTransport Flag `json:",omitempty"`
109 }
110
111 // Security specifies the transports used to encrypt insecure network
core/node/libp2p/transport.go
+14 -4
@@ -6,9 +6,10 @@ import (
6 "github.com/ipfs/kubo/config"
7 "github.com/libp2p/go-libp2p"
8 "github.com/libp2p/go-libp2p/core/metrics"
9 - libp2pquic "github.com/libp2p/go-libp2p/p2p/transport/quic"
9 + quic "github.com/libp2p/go-libp2p/p2p/transport/quic"
10 "github.com/libp2p/go-libp2p/p2p/transport/tcp"
11 "github.com/libp2p/go-libp2p/p2p/transport/websocket"
12 + webtransport "github.com/libp2p/go-libp2p/p2p/transport/webtransport"
13
14 "go.uber.org/fx"
15 )
@@ -31,15 +32,24 @@ func Transports(tptConfig config.Transports) interface{} {
32
33 if tptConfig.Network.QUIC.WithDefault(!privateNetworkEnabled) {
34 if privateNetworkEnabled {
34 - // QUIC was force enabled while the private network was turned on.
35 - // Fail and tell the user.
35 return opts, fmt.Errorf(
36 "The QUIC transport does not support private networks. " +
37 "Please disable Swarm.Transports.Network.QUIC.",
38 )
39 }
40 // TODO(9290): Make WithMetrics configurable
42 - opts.Opts = append(opts.Opts, libp2p.Transport(libp2pquic.NewTransport, libp2pquic.WithMetrics()))
41 + opts.Opts = append(opts.Opts, libp2p.Transport(quic.NewTransport, quic.WithMetrics()))
42 + }
43 +
44 + // TODO(9292): Remove the false && to allows it enabled by default
45 + if tptConfig.Network.WebTransport.WithDefault(false && !privateNetworkEnabled) {
46 + if privateNetworkEnabled {
47 + return opts, fmt.Errorf(
48 + "The WebTransport transport does not support private networks. " +
49 + "Please disable Swarm.Transports.Network.WebTransport.",
50 + )
51 + }
52 + opts.Opts = append(opts.Opts, libp2p.Transport(webtransport.New))
53 }
54
55 return opts, nil
docs/examples/kubo-as-a-library/go.mod
+4 -2
@@ -10,7 +10,7 @@ require (
10 github.com/ipfs/go-ipfs-files v0.1.1
11 github.com/ipfs/interface-go-ipfs-core v0.7.0
12 github.com/ipfs/kubo v0.14.0-rc1
13 - github.com/libp2p/go-libp2p v0.23.1
13 + github.com/libp2p/go-libp2p v0.23.2
14 github.com/multiformats/go-multiaddr v0.7.0
15 )
16
@@ -137,10 +137,12 @@ require (
137 github.com/libp2p/go-reuseport v0.2.0 // indirect
138 github.com/libp2p/go-yamux/v4 v4.0.0 // indirect
139 github.com/libp2p/zeroconf/v2 v2.2.0 // indirect
140 - github.com/lucas-clemente/quic-go v0.29.0 // indirect
140 + github.com/lucas-clemente/quic-go v0.29.1 // indirect
141 + github.com/marten-seemann/qpack v0.2.1 // indirect
142 github.com/marten-seemann/qtls-go1-18 v0.1.2 // indirect
143 github.com/marten-seemann/qtls-go1-19 v0.1.0 // indirect
144 github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect
145 + github.com/marten-seemann/webtransport-go v0.1.1 // indirect
146 github.com/mattn/go-isatty v0.0.16 // indirect
147 github.com/mattn/go-pointer v0.0.1 // indirect
148 github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
docs/examples/kubo-as-a-library/go.sum
+6 -6
@@ -790,8 +790,8 @@ github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76f
790 github.com/libp2p/go-libp2p v0.18.0/go.mod h1:+veaZ9z1SZQhmc5PW78jvnnxZ89Mgvmh4cggO11ETmw=
791 github.com/libp2p/go-libp2p v0.20.0/go.mod h1:g0C5Fu+aXXbCXkusCzLycuBowEih3ElmDqtbo61Em7k=
792 github.com/libp2p/go-libp2p v0.22.0/go.mod h1:UDolmweypBSjQb2f7xutPnwZ/fxioLbMBxSjRksxxU4=
793 -github.com/libp2p/go-libp2p v0.23.1 h1:hJCmemCCwDaENZfMW12nUYTxoF0W5dIyg+T5jizh2Bs=
794 -github.com/libp2p/go-libp2p v0.23.1/go.mod h1:7/xgogSbnOaGRlRbu4L0P1mVxC7xtLgk4suFhpag6cM=
793 +github.com/libp2p/go-libp2p v0.23.2 h1:yqyTeKQJyofWXxEv/eEVUvOrGdt/9x+0PIQ4N1kaxmE=
794 +github.com/libp2p/go-libp2p v0.23.2/go.mod h1:s9DEa5NLR4g+LZS+md5uGU4emjMWFiqkZr6hBTY8UxI=
795 github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo=
796 github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I=
797 github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw=
@@ -1131,8 +1131,8 @@ github.com/lucas-clemente/quic-go v0.24.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2
1131 github.com/lucas-clemente/quic-go v0.25.0/go.mod h1:YtzP8bxRVCBlO77yRanE264+fY/T2U9ZlW1AaHOsMOg=
1132 github.com/lucas-clemente/quic-go v0.27.1/go.mod h1:AzgQoPda7N+3IqMMMkywBKggIFo2KT6pfnlrQ2QieeI=
1133 github.com/lucas-clemente/quic-go v0.28.1/go.mod h1:oGz5DKK41cJt5+773+BSO9BXDsREY4HLf7+0odGAPO0=
1134 -github.com/lucas-clemente/quic-go v0.29.0 h1:Vw0mGTfmWqGzh4jx/kMymsIkFK6rErFVmg+t9RLrnZE=
1135 -github.com/lucas-clemente/quic-go v0.29.0/go.mod h1:CTcNfLYJS2UuRNB+zcNlgvkjBhxX6Hm3WUxxAQx2mgE=
1134 +github.com/lucas-clemente/quic-go v0.29.1 h1:Z+WMJ++qMLhvpFkRZA+jl3BTxUjm415YBmWanXB8zP0=
1135 +github.com/lucas-clemente/quic-go v0.29.1/go.mod h1:CTcNfLYJS2UuRNB+zcNlgvkjBhxX6Hm3WUxxAQx2mgE=
1136 github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI=
1137 github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
1138 github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
@@ -1159,8 +1159,8 @@ github.com/marten-seemann/qtls-go1-19 v0.1.0 h1:rLFKD/9mp/uq1SYGYuVZhm83wkmU95pK
1159 github.com/marten-seemann/qtls-go1-19 v0.1.0/go.mod h1:5HTDWtVudo/WFsHKRNuOhWlbdjrfs5JHrYb0wIJqGpI=
1160 github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk=
1161 github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU=
1162 -github.com/marten-seemann/webtransport-go v0.1.0 h1:tKknMOI+9fmMTPRJv3Fz7XpDq67Tg8Va8B1QEE+qaZw=
1163 -github.com/marten-seemann/webtransport-go v0.1.0/go.mod h1:CACJOFSohYRmnqHWHWZ2rpTr9MfA0pNqOSkpqb6J/+w=
1162 +github.com/marten-seemann/webtransport-go v0.1.1 h1:TnyKp3pEXcDooTaNn4s9dYpMJ7kMnTp7k5h+SgYP/mc=
1163 +github.com/marten-seemann/webtransport-go v0.1.1/go.mod h1:kBEh5+RSvOA4troP1vyOVBWK4MIMzDICXVrvCPrYcrM=
1164 github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
1165 github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
1166 github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
go.mod
+4 -2
@@ -68,7 +68,7 @@ require (
68 github.com/jbenet/go-temp-err-catcher v0.1.0
69 github.com/jbenet/goprocess v0.1.4
70 github.com/libp2p/go-doh-resolver v0.4.0
71 - github.com/libp2p/go-libp2p v0.23.1
71 + github.com/libp2p/go-libp2p v0.23.2
72 github.com/libp2p/go-libp2p-core v0.20.1 // indirect
73 github.com/libp2p/go-libp2p-http v0.2.1
74 github.com/libp2p/go-libp2p-kad-dht v0.18.0
@@ -188,10 +188,12 @@ require (
188 github.com/libp2p/go-reuseport v0.2.0 // indirect
189 github.com/libp2p/go-yamux/v4 v4.0.0 // indirect
190 github.com/libp2p/zeroconf/v2 v2.2.0 // indirect
191 - github.com/lucas-clemente/quic-go v0.29.0 // indirect
191 + github.com/lucas-clemente/quic-go v0.29.1 // indirect
192 + github.com/marten-seemann/qpack v0.2.1 // indirect
193 github.com/marten-seemann/qtls-go1-18 v0.1.2 // indirect
194 github.com/marten-seemann/qtls-go1-19 v0.1.0 // indirect
195 github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect
196 + github.com/marten-seemann/webtransport-go v0.1.1 // indirect
197 github.com/mattn/go-colorable v0.1.4 // indirect
198 github.com/mattn/go-isatty v0.0.16 // indirect
199 github.com/mattn/go-pointer v0.0.1 // indirect
go.sum
+6 -5
@@ -783,8 +783,8 @@ github.com/libp2p/go-libp2p v0.14.3/go.mod h1:d12V4PdKbpL0T1/gsUNN8DfgMuRPDX8bS2
783 github.com/libp2p/go-libp2p v0.14.4/go.mod h1:EIRU0Of4J5S8rkockZM7eJp2S0UrCyi55m2kJVru3rM=
784 github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76fyMX364/O4=
785 github.com/libp2p/go-libp2p v0.18.0/go.mod h1:+veaZ9z1SZQhmc5PW78jvnnxZ89Mgvmh4cggO11ETmw=
786 -github.com/libp2p/go-libp2p v0.23.1 h1:hJCmemCCwDaENZfMW12nUYTxoF0W5dIyg+T5jizh2Bs=
787 -github.com/libp2p/go-libp2p v0.23.1/go.mod h1:7/xgogSbnOaGRlRbu4L0P1mVxC7xtLgk4suFhpag6cM=
786 +github.com/libp2p/go-libp2p v0.23.2 h1:yqyTeKQJyofWXxEv/eEVUvOrGdt/9x+0PIQ4N1kaxmE=
787 +github.com/libp2p/go-libp2p v0.23.2/go.mod h1:s9DEa5NLR4g+LZS+md5uGU4emjMWFiqkZr6hBTY8UxI=
788 github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo=
789 github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I=
790 github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw=
@@ -1116,8 +1116,8 @@ github.com/lucas-clemente/quic-go v0.21.2/go.mod h1:vF5M1XqhBAHgbjKcJOXY3JZz3GP0
1116 github.com/lucas-clemente/quic-go v0.23.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0=
1117 github.com/lucas-clemente/quic-go v0.24.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0=
1118 github.com/lucas-clemente/quic-go v0.25.0/go.mod h1:YtzP8bxRVCBlO77yRanE264+fY/T2U9ZlW1AaHOsMOg=
1119 -github.com/lucas-clemente/quic-go v0.29.0 h1:Vw0mGTfmWqGzh4jx/kMymsIkFK6rErFVmg+t9RLrnZE=
1120 -github.com/lucas-clemente/quic-go v0.29.0/go.mod h1:CTcNfLYJS2UuRNB+zcNlgvkjBhxX6Hm3WUxxAQx2mgE=
1119 +github.com/lucas-clemente/quic-go v0.29.1 h1:Z+WMJ++qMLhvpFkRZA+jl3BTxUjm415YBmWanXB8zP0=
1120 +github.com/lucas-clemente/quic-go v0.29.1/go.mod h1:CTcNfLYJS2UuRNB+zcNlgvkjBhxX6Hm3WUxxAQx2mgE=
1121 github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI=
1122 github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
1123 github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
@@ -1139,7 +1139,8 @@ github.com/marten-seemann/qtls-go1-19 v0.1.0 h1:rLFKD/9mp/uq1SYGYuVZhm83wkmU95pK
1139 github.com/marten-seemann/qtls-go1-19 v0.1.0/go.mod h1:5HTDWtVudo/WFsHKRNuOhWlbdjrfs5JHrYb0wIJqGpI=
1140 github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk=
1141 github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU=
1142 -github.com/marten-seemann/webtransport-go v0.1.0 h1:tKknMOI+9fmMTPRJv3Fz7XpDq67Tg8Va8B1QEE+qaZw=
1142 +github.com/marten-seemann/webtransport-go v0.1.1 h1:TnyKp3pEXcDooTaNn4s9dYpMJ7kMnTp7k5h+SgYP/mc=
1143 +github.com/marten-seemann/webtransport-go v0.1.1/go.mod h1:kBEh5+RSvOA4troP1vyOVBWK4MIMzDICXVrvCPrYcrM=
1144 github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
1145 github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
1146 github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
test/sharness/t0191-webtransport-ping.sh new
+49
@@ -0,0 +1,49 @@
1 +#!/usr/bin/env bash
2 +
3 +test_description="Test ping over WebTransport command"
4 +
5 +. lib/test-lib.sh
6 +
7 +test_init_ipfs
8 +
9 +# start iptb + wait for peering
10 +test_expect_success 'init iptb' '
11 + iptb testbed create -type localipfs -count 2 -init
12 +'
13 +
14 +addr1='"[\"/ip4/127.0.0.1/udp/0/quic/webtransport\"]"'
15 +addr2='"[\"/ip4/127.0.0.1/udp/0/quic/webtransport\"]"'
16 +test_expect_success "add WebTransport swarm addresses" '
17 + ipfsi 0 config --json Addresses.Swarm '$addr1' &&
18 + ipfsi 0 config --json Swarm.Transports.Network.WebTransport true &&
19 + ipfsi 1 config --json Addresses.Swarm '$addr2' &&
20 + ipfsi 1 config --json Swarm.Transports.Network.WebTransport true
21 +'
22 +
23 +startup_cluster 2
24 +
25 +test_expect_success 'peer ids' '
26 + PEERID_0=$(iptb attr get 0 id) &&
27 + PEERID_1=$(iptb attr get 1 id)
28 +'
29 +
30 +test_expect_success "test ping other" '
31 + ipfsi 0 ping -n2 -- "$PEERID_1" &&
32 + ipfsi 1 ping -n2 -- "$PEERID_0"
33 +'
34 +
35 +test_expect_success "test ping self" '
36 + test_must_fail ipfsi 0 ping -n2 -- "$PEERID_0" &&
37 + test_must_fail ipfsi 1 ping -n2 -- "$PEERID_1"
38 +'
39 +
40 +test_expect_success "test ping 0" '
41 + test_must_fail ipfsi 0 ping -n0 -- "$PEERID_1" &&
42 + test_must_fail ipfsi 1 ping -n0 -- "$PEERID_0"
43 +'
44 +
45 +test_expect_success 'stop iptb' '
46 + iptb stop
47 +'
48 +
49 +test_done
test/sharness/t0195-noise.sh renamed