Skip to content

Commit 82d6202

Browse files
committed
adapt macsec netlink support of xpn to 4.19 kernel
Signed-off-by: Guohan Lu <[email protected]>
1 parent 1aff1ad commit 82d6202

File tree

3 files changed

+94
-68
lines changed

3 files changed

+94
-68
lines changed

patch/macsec-Netlink-support-of-XPN-cipher-suites-IEEE-802.patch

Lines changed: 54 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
From 48ef50fa866aae087f63c7de8a47e76537f88691 Mon Sep 17 00:00:00 2001
2+
23
From: Era Mayflower <[email protected]>
3-
Date: Mon, 9 Mar 2020 19:47:02 +0000
4+
45
Subject: [PATCH] macsec: Netlink support of XPN cipher suites (IEEE 802.1AEbw)
56

67
Netlink support of extended packet number cipher suites,
@@ -25,16 +26,25 @@ Depends on: macsec: Support XPN frame handling - IEEE 802.1AEbw.
2526
Signed-off-by: Era Mayflower <[email protected]>
2627
Signed-off-by: David S. Miller <[email protected]>
2728
---
28-
drivers/net/macsec.c | 161 ++++++++++++++++++++++++++++++---
29-
include/net/macsec.h | 3 +
30-
include/uapi/linux/if_macsec.h | 8 +-
31-
3 files changed, 157 insertions(+), 15 deletions(-)
29+
drivers/net/macsec.c | 164 +++++++++++++++++++++++++++++++++++++---
30+
include/uapi/linux/if_macsec.h | 8 +-
31+
2 files changed, 157 insertions(+), 15 deletions(-)
3232

3333
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
34-
index 6c71e250cccb..49b138e7aeac 100644
34+
index a41a6cd78..0b86908b9 100644
3535
--- a/drivers/net/macsec.c
3636
+++ b/drivers/net/macsec.c
37-
@@ -240,11 +240,13 @@ static struct macsec_cb *macsec_skb_cb(struct sk_buff *skb)
37+
@@ -25,6 +25,9 @@
38+
39+
#include <uapi/linux/if_macsec.h>
40+
41+
+#define MACSEC_DEFAULT_PN_LEN 4
42+
+#define MACSEC_XPN_PN_LEN 8
43+
+
44+
#define MACSEC_SALT_LEN 12
45+
#define MACSEC_NUM_AN 4 /* 2 bits for the association number */
46+
47+
@@ -444,11 +447,13 @@ static struct macsec_cb *macsec_skb_cb(struct sk_buff *skb)
3848
#define MACSEC_PORT_ES (htons(0x0001))
3949
#define MACSEC_PORT_SCB (0x0000)
4050
#define MACSEC_UNDEF_SCI ((__force sci_t)0xffffffffffffffffULL)
@@ -48,23 +58,23 @@ index 6c71e250cccb..49b138e7aeac 100644
4858
#define DEFAULT_SEND_SCI true
4959
#define DEFAULT_ENCRYPT false
5060
#define DEFAULT_ENCODING_SA 0
51-
@@ -1311,6 +1313,7 @@ static int init_rx_sa(struct macsec_rx_sa *rx_sa, char *sak, int key_len,
61+
@@ -1438,6 +1443,7 @@ static int init_rx_sa(struct macsec_rx_sa *rx_sa, char *sak, int key_len,
5262
return PTR_ERR(rx_sa->key.tfm);
5363
}
5464

5565
+ rx_sa->ssci = MACSEC_UNDEF_SSCI;
5666
rx_sa->active = false;
5767
rx_sa->next_pn = 1;
5868
refcount_set(&rx_sa->refcnt, 1);
59-
@@ -1409,6 +1412,7 @@ static int init_tx_sa(struct macsec_tx_sa *tx_sa, char *sak, int key_len,
69+
@@ -1536,6 +1542,7 @@ static int init_tx_sa(struct macsec_tx_sa *tx_sa, char *sak, int key_len,
6070
return PTR_ERR(tx_sa->key.tfm);
6171
}
6272

6373
+ tx_sa->ssci = MACSEC_UNDEF_SSCI;
6474
tx_sa->active = false;
6575
refcount_set(&tx_sa->refcnt, 1);
6676
spin_lock_init(&tx_sa->lock);
67-
@@ -1452,6 +1456,16 @@ static int nla_put_sci(struct sk_buff *skb, int attrtype, sci_t value,
77+
@@ -1579,6 +1586,16 @@ static int nla_put_sci(struct sk_buff *skb, int attrtype, sci_t value,
6878
return nla_put_u64_64bit(skb, attrtype, (__force u64)value, padattr);
6979
}
7080

@@ -81,7 +91,7 @@ index 6c71e250cccb..49b138e7aeac 100644
8191
static struct macsec_tx_sa *get_txsa_from_nl(struct net *net,
8292
struct nlattr **attrs,
8393
struct nlattr **tb_sa,
84-
@@ -1567,11 +1581,14 @@ static const struct nla_policy macsec_genl_rxsc_policy[NUM_MACSEC_RXSC_ATTR] = {
94+
@@ -1694,11 +1711,14 @@ static const struct nla_policy macsec_genl_rxsc_policy[NUM_MACSEC_RXSC_ATTR] = {
8595
static const struct nla_policy macsec_genl_sa_policy[NUM_MACSEC_SA_ATTR] = {
8696
[MACSEC_SA_ATTR_AN] = { .type = NLA_U8 },
8797
[MACSEC_SA_ATTR_ACTIVE] = { .type = NLA_U8 },
@@ -96,8 +106,8 @@ index 6c71e250cccb..49b138e7aeac 100644
96106
+ .len = MACSEC_SALT_LEN, },
97107
};
98108

99-
static const struct nla_policy macsec_genl_offload_policy[NUM_MACSEC_OFFLOAD_ATTR] = {
100-
@@ -1644,7 +1661,8 @@ static bool validate_add_rxsa(struct nlattr **attrs)
109+
static int parse_sa_config(struct nlattr **attrs, struct nlattr **tb_sa)
110+
@@ -1737,7 +1757,8 @@ static bool validate_add_rxsa(struct nlattr **attrs)
101111
if (nla_get_u8(attrs[MACSEC_SA_ATTR_AN]) >= MACSEC_NUM_AN)
102112
return false;
103113

@@ -107,15 +117,15 @@ index 6c71e250cccb..49b138e7aeac 100644
107117
return false;
108118

109119
if (attrs[MACSEC_SA_ATTR_ACTIVE]) {
110-
@@ -1666,6 +1684,7 @@ static int macsec_add_rxsa(struct sk_buff *skb, struct genl_info *info)
120+
@@ -1759,6 +1780,7 @@ static int macsec_add_rxsa(struct sk_buff *skb, struct genl_info *info)
111121
struct macsec_rx_sc *rx_sc;
112122
struct macsec_rx_sa *rx_sa;
113123
unsigned char assoc_num;
114124
+ int pn_len;
115125
struct nlattr *tb_rxsc[MACSEC_RXSC_ATTR_MAX + 1];
116126
struct nlattr *tb_sa[MACSEC_SA_ATTR_MAX + 1];
117127
int err;
118-
@@ -1698,6 +1717,29 @@ static int macsec_add_rxsa(struct sk_buff *skb, struct genl_info *info)
128+
@@ -1791,6 +1813,29 @@ static int macsec_add_rxsa(struct sk_buff *skb, struct genl_info *info)
119129
return -EINVAL;
120130
}
121131

@@ -145,7 +155,7 @@ index 6c71e250cccb..49b138e7aeac 100644
145155
rx_sa = rtnl_dereference(rx_sc->sa[assoc_num]);
146156
if (rx_sa) {
147157
rtnl_unlock();
148-
@@ -1720,7 +1762,7 @@ static int macsec_add_rxsa(struct sk_buff *skb, struct genl_info *info)
158+
@@ -1813,13 +1858,19 @@ static int macsec_add_rxsa(struct sk_buff *skb, struct genl_info *info)
149159

150160
if (tb_sa[MACSEC_SA_ATTR_PN]) {
151161
spin_lock_bh(&rx_sa->lock);
@@ -154,9 +164,8 @@ index 6c71e250cccb..49b138e7aeac 100644
154164
spin_unlock_bh(&rx_sa->lock);
155165
}
156166

157-
@@ -1750,6 +1792,12 @@ static int macsec_add_rxsa(struct sk_buff *skb, struct genl_info *info)
158-
goto cleanup;
159-
}
167+
if (tb_sa[MACSEC_SA_ATTR_ACTIVE])
168+
rx_sa->active = !!nla_get_u8(tb_sa[MACSEC_SA_ATTR_ACTIVE]);
160169

161170
+ if (secy->xpn) {
162171
+ rx_sa->ssci = nla_get_ssci(tb_sa[MACSEC_SA_ATTR_SSCI]);
@@ -165,17 +174,17 @@ index 6c71e250cccb..49b138e7aeac 100644
165174
+ }
166175
+
167176
nla_memcpy(rx_sa->key.id, tb_sa[MACSEC_SA_ATTR_KEYID], MACSEC_KEYID_LEN);
177+
rx_sa->sc = rx_sc;
168178
rcu_assign_pointer(rx_sc->sa[assoc_num], rx_sa);
169-
170-
@@ -1874,6 +1922,7 @@ static int macsec_add_txsa(struct sk_buff *skb, struct genl_info *info)
179+
@@ -1915,6 +1966,7 @@ static int macsec_add_txsa(struct sk_buff *skb, struct genl_info *info)
171180
struct macsec_tx_sc *tx_sc;
172181
struct macsec_tx_sa *tx_sa;
173182
unsigned char assoc_num;
174183
+ int pn_len;
175184
struct nlattr *tb_sa[MACSEC_SA_ATTR_MAX + 1];
176-
bool was_operational;
177185
int err;
178-
@@ -1906,6 +1955,29 @@ static int macsec_add_txsa(struct sk_buff *skb, struct genl_info *info)
186+
187+
@@ -1946,6 +1998,29 @@ static int macsec_add_txsa(struct sk_buff *skb, struct genl_info *info)
179188
return -EINVAL;
180189
}
181190

@@ -205,17 +214,8 @@ index 6c71e250cccb..49b138e7aeac 100644
205214
tx_sa = rtnl_dereference(tx_sc->sa[assoc_num]);
206215
if (tx_sa) {
207216
rtnl_unlock();
208-
@@ -1927,7 +1999,7 @@ static int macsec_add_txsa(struct sk_buff *skb, struct genl_info *info)
209-
}
210-
211-
spin_lock_bh(&tx_sa->lock);
212-
- tx_sa->next_pn_halves.lower = nla_get_u32(tb_sa[MACSEC_SA_ATTR_PN]);
213-
+ tx_sa->next_pn = nla_get_u64(tb_sa[MACSEC_SA_ATTR_PN]);
214-
spin_unlock_bh(&tx_sa->lock);
215-
216-
if (tb_sa[MACSEC_SA_ATTR_ACTIVE])
217-
@@ -1958,6 +2030,12 @@ static int macsec_add_txsa(struct sk_buff *skb, struct genl_info *info)
218-
goto cleanup;
217+
@@ -1966,10 +2041,16 @@ static int macsec_add_txsa(struct sk_buff *skb, struct genl_info *info)
218+
return err;
219219
}
220220

221221
+ if (secy->xpn) {
@@ -225,9 +225,14 @@ index 6c71e250cccb..49b138e7aeac 100644
225225
+ }
226226
+
227227
nla_memcpy(tx_sa->key.id, tb_sa[MACSEC_SA_ATTR_KEYID], MACSEC_KEYID_LEN);
228-
rcu_assign_pointer(tx_sc->sa[assoc_num], tx_sa);
229228

230-
@@ -2164,7 +2242,9 @@ static bool validate_upd_sa(struct nlattr **attrs)
229+
spin_lock_bh(&tx_sa->lock);
230+
- tx_sa->next_pn_halves.lower = nla_get_u32(tb_sa[MACSEC_SA_ATTR_PN]);
231+
+ tx_sa->next_pn = nla_get_u64(tb_sa[MACSEC_SA_ATTR_PN]);
232+
spin_unlock_bh(&tx_sa->lock);
233+
234+
if (tb_sa[MACSEC_SA_ATTR_ACTIVE])
235+
@@ -2107,7 +2188,9 @@ static bool validate_upd_sa(struct nlattr **attrs)
231236
{
232237
if (!attrs[MACSEC_SA_ATTR_AN] ||
233238
attrs[MACSEC_SA_ATTR_KEY] ||
@@ -238,7 +243,7 @@ index 6c71e250cccb..49b138e7aeac 100644
238243
return false;
239244

240245
if (nla_get_u8(attrs[MACSEC_SA_ATTR_AN]) >= MACSEC_NUM_AN)
241-
@@ -2214,9 +2294,19 @@ static int macsec_upd_txsa(struct sk_buff *skb, struct genl_info *info)
246+
@@ -2152,8 +2235,18 @@ static int macsec_upd_txsa(struct sk_buff *skb, struct genl_info *info)
242247
}
243248

244249
if (tb_sa[MACSEC_SA_ATTR_PN]) {
@@ -253,13 +258,12 @@ index 6c71e250cccb..49b138e7aeac 100644
253258
+ }
254259
+
255260
spin_lock_bh(&tx_sa->lock);
256-
prev_pn = tx_sa->next_pn_halves;
257261
- tx_sa->next_pn_halves.lower = nla_get_u32(tb_sa[MACSEC_SA_ATTR_PN]);
258262
+ tx_sa->next_pn = nla_get_u64(tb_sa[MACSEC_SA_ATTR_PN]);
259263
spin_unlock_bh(&tx_sa->lock);
260264
}
261265

262-
@@ -2300,9 +2390,19 @@ static int macsec_upd_rxsa(struct sk_buff *skb, struct genl_info *info)
266+
@@ -2200,8 +2293,18 @@ static int macsec_upd_rxsa(struct sk_buff *skb, struct genl_info *info)
263267
}
264268

265269
if (tb_sa[MACSEC_SA_ATTR_PN]) {
@@ -274,13 +278,12 @@ index 6c71e250cccb..49b138e7aeac 100644
274278
+ }
275279
+
276280
spin_lock_bh(&rx_sa->lock);
277-
prev_pn = rx_sa->next_pn_halves;
278281
- rx_sa->next_pn_halves.lower = nla_get_u32(tb_sa[MACSEC_SA_ATTR_PN]);
279282
+ rx_sa->next_pn = nla_get_u64(tb_sa[MACSEC_SA_ATTR_PN]);
280283
spin_unlock_bh(&rx_sa->lock);
281284
}
282285

283-
@@ -2749,10 +2849,10 @@ static int nla_put_secy(struct macsec_secy *secy, struct sk_buff *skb)
286+
@@ -2467,10 +2570,10 @@ static int nla_put_secy(struct macsec_secy *secy, struct sk_buff *skb)
284287

285288
switch (secy->key_len) {
286289
case MACSEC_GCM_AES_128_SAK_LEN:
@@ -293,7 +296,7 @@ index 6c71e250cccb..49b138e7aeac 100644
293296
break;
294297
default:
295298
goto cancel;
296-
@@ -2843,6 +2943,8 @@ dump_secy(struct macsec_secy *secy, struct net_device *dev,
299+
@@ -2552,6 +2655,8 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev,
297300
for (i = 0, j = 1; i < MACSEC_NUM_AN; i++) {
298301
struct macsec_tx_sa *tx_sa = rtnl_dereference(tx_sc->sa[i]);
299302
struct nlattr *txsa_nest;
@@ -302,7 +305,7 @@ index 6c71e250cccb..49b138e7aeac 100644
302305

303306
if (!tx_sa)
304307
continue;
305-
@@ -2853,9 +2955,18 @@ dump_secy(struct macsec_secy *secy, struct net_device *dev,
308+
@@ -2562,9 +2667,18 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev,
306309
goto nla_put_failure;
307310
}
308311

@@ -322,7 +325,7 @@ index 6c71e250cccb..49b138e7aeac 100644
322325
nla_put_u8(skb, MACSEC_SA_ATTR_ACTIVE, tx_sa->active)) {
323326
nla_nest_cancel(skb, txsa_nest);
324327
nla_nest_cancel(skb, txsa_list);
325-
@@ -2928,6 +3039,8 @@ dump_secy(struct macsec_secy *secy, struct net_device *dev,
328+
@@ -2636,6 +2750,8 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev,
326329
for (i = 0, k = 1; i < MACSEC_NUM_AN; i++) {
327330
struct macsec_rx_sa *rx_sa = rtnl_dereference(rx_sc->sa[i]);
328331
struct nlattr *rxsa_nest;
@@ -331,7 +334,7 @@ index 6c71e250cccb..49b138e7aeac 100644
331334

332335
if (!rx_sa)
333336
continue;
334-
@@ -2957,9 +3070,18 @@ dump_secy(struct macsec_secy *secy, struct net_device *dev,
337+
@@ -2664,9 +2780,18 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev,
335338
}
336339
nla_nest_end(skb, attr);
337340

@@ -351,7 +354,7 @@ index 6c71e250cccb..49b138e7aeac 100644
351354
nla_put_u8(skb, MACSEC_SA_ATTR_ACTIVE, rx_sa->active)) {
352355
nla_nest_cancel(skb, rxsa_nest);
353356
nla_nest_cancel(skb, rxsc_nest);
354-
@@ -3503,9 +3625,19 @@ static int macsec_changelink_common(struct net_device *dev,
357+
@@ -3173,9 +3298,19 @@ static int macsec_changelink_common(struct net_device *dev,
355358
case MACSEC_CIPHER_ID_GCM_AES_128:
356359
case MACSEC_DEFAULT_CIPHER_ID:
357360
secy->key_len = MACSEC_GCM_AES_128_SAK_LEN;
@@ -371,15 +374,15 @@ index 6c71e250cccb..49b138e7aeac 100644
371374
break;
372375
default:
373376
return -EINVAL;
374-
@@ -3695,6 +3827,7 @@ static int macsec_add_dev(struct net_device *dev, sci_t sci, u8 icv_len)
377+
@@ -3314,6 +3449,7 @@ static int macsec_add_dev(struct net_device *dev, sci_t sci, u8 icv_len)
375378
secy->validate_frames = MACSEC_VALIDATE_DEFAULT;
376379
secy->protect_frames = true;
377380
secy->replay_protect = false;
378381
+ secy->xpn = DEFAULT_XPN;
379382

380383
secy->sci = sci;
381384
secy->tx_sc.active = true;
382-
@@ -3824,6 +3957,8 @@ static int macsec_validate_attr(struct nlattr *tb[], struct nlattr *data[],
385+
@@ -3448,6 +3584,8 @@ static int macsec_validate_attr(struct nlattr *tb[], struct nlattr *data[],
383386
switch (csid) {
384387
case MACSEC_CIPHER_ID_GCM_AES_128:
385388
case MACSEC_CIPHER_ID_GCM_AES_256:
@@ -388,7 +391,7 @@ index 6c71e250cccb..49b138e7aeac 100644
388391
case MACSEC_DEFAULT_CIPHER_ID:
389392
if (icv_len < MACSEC_MIN_ICV_LEN ||
390393
icv_len > MACSEC_STD_ICV_LEN)
391-
@@ -3897,10 +4032,10 @@ static int macsec_fill_info(struct sk_buff *skb,
394+
@@ -3521,10 +3659,10 @@ static int macsec_fill_info(struct sk_buff *skb,
392395

393396
switch (secy->key_len) {
394397
case MACSEC_GCM_AES_128_SAK_LEN:
@@ -401,22 +404,8 @@ index 6c71e250cccb..49b138e7aeac 100644
401404
break;
402405
default:
403406
goto nla_put_failure;
404-
diff --git a/include/net/macsec.h b/include/net/macsec.h
405-
index 43cd54e17877..2e4780dbf5c6 100644
406-
--- a/include/net/macsec.h
407-
+++ b/include/net/macsec.h
408-
@@ -11,6 +11,9 @@
409-
#include <uapi/linux/if_link.h>
410-
#include <uapi/linux/if_macsec.h>
411-
412-
+#define MACSEC_DEFAULT_PN_LEN 4
413-
+#define MACSEC_XPN_PN_LEN 8
414-
+
415-
#define MACSEC_SALT_LEN 12
416-
#define MACSEC_NUM_AN 4 /* 2 bits for the association number */
417-
418407
diff --git a/include/uapi/linux/if_macsec.h b/include/uapi/linux/if_macsec.h
419-
index 1d63c43c38cc..3af2aa069a36 100644
408+
index 98e4d5d7c..df638ba7a 100644
420409
--- a/include/uapi/linux/if_macsec.h
421410
+++ b/include/uapi/linux/if_macsec.h
422411
@@ -22,9 +22,11 @@
@@ -432,7 +421,7 @@ index 1d63c43c38cc..3af2aa069a36 100644
432421

433422
/* deprecated cipher ID for GCM-AES-128 */
434423
#define MACSEC_DEFAULT_CIPHER_ID 0x0080020001000001ULL
435-
@@ -88,11 +90,13 @@ enum macsec_sa_attrs {
424+
@@ -87,11 +89,13 @@ enum macsec_sa_attrs {
436425
MACSEC_SA_ATTR_UNSPEC,
437426
MACSEC_SA_ATTR_AN, /* config/dump, u8 0..3 */
438427
MACSEC_SA_ATTR_ACTIVE, /* config/dump, u8 0..1 */
@@ -447,6 +436,3 @@ index 1d63c43c38cc..3af2aa069a36 100644
447436
__MACSEC_SA_ATTR_END,
448437
NUM_MACSEC_SA_ATTR = __MACSEC_SA_ATTR_END,
449438
MACSEC_SA_ATTR_MAX = __MACSEC_SA_ATTR_END - 1,
450-
--
451-
2.25.1
452-

patch/netlink-add-NLA_MIN_LEN.patch

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
From 6f455f5f4e9c28aefaefbe18ce7304b499645d75 Mon Sep 17 00:00:00 2001
2+
3+
From: Johannes Berg <[email protected]>
4+
5+
Subject: [PATCH] netlink: add NLA_MIN_LEN
6+
7+
Rather than using NLA_UNSPEC for this type of thing, use NLA_MIN_LEN
8+
so we can make NLA_UNSPEC be NLA_REJECT under certain conditions for
9+
future attributes.
10+
11+
While at it, also use NLA_EXACT_LEN for the struct example.
12+
13+
Signed-off-by: Johannes Berg <[email protected]>
14+
Signed-off-by: David S. Miller <[email protected]>
15+
---
16+
include/net/netlink.h | 3 ++-
17+
1 file changed, 2 insertions(+), 1 deletion(-)
18+
19+
diff --git a/include/net/netlink.h b/include/net/netlink.h
20+
index 39e1d875d..46c65b7cb 100644
21+
--- a/include/net/netlink.h
22+
+++ b/include/net/netlink.h
23+
@@ -180,6 +180,7 @@ enum {
24+
NLA_S32,
25+
NLA_S64,
26+
NLA_BITFIELD32,
27+
+ NLA_MIN_LEN,
28+
__NLA_TYPE_MAX,
29+
};
30+
31+
@@ -215,7 +216,7 @@ enum {
32+
* static const struct nla_policy my_policy[ATTR_MAX+1] = {
33+
* [ATTR_FOO] = { .type = NLA_U16 },
34+
* [ATTR_BAR] = { .type = NLA_STRING, .len = BARSIZ },
35+
- * [ATTR_BAZ] = { .len = sizeof(struct mystruct) },
36+
+ * [ATTR_BAZ] = { .type = NLA_EXACT_LEN, .len = sizeof(struct mystruct) },
37+
* [ATTR_GOO] = { .type = NLA_BITFIELD32, .validation_data = &myvalidflags },
38+
* };
39+
*/

patch/series

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ e1000-Do-not-perform-reset-in-reset_task-if-we-are-a.patch
3737
0005-dt-bindings-hwmon-Add-tmp75b-to-lm75.txt.patch
3838
0006-device-tree-bindinds-add-NXP-PCT2075-as-compatible-d.patch
3939
macsec-Support-XPN-frame-handling-IEEE-802.1AEbw.patch
40+
netlink-add-NLA_MIN_LEN.patch
4041
macsec-Netlink-support-of-XPN-cipher-suites-IEEE-802.patch
4142
#
4243
# (Marvell)

0 commit comments

Comments
 (0)