0001
0002
0003
0004 #ifndef NFP_FLOWER_CMSG_H
0005 #define NFP_FLOWER_CMSG_H
0006
0007 #include <linux/bitfield.h>
0008 #include <linux/skbuff.h>
0009 #include <linux/types.h>
0010 #include <net/geneve.h>
0011 #include <net/gre.h>
0012 #include <net/vxlan.h>
0013
0014 #include "../nfp_app.h"
0015 #include "../nfpcore/nfp_cpp.h"
0016
0017 #define NFP_FLOWER_LAYER_EXT_META BIT(0)
0018 #define NFP_FLOWER_LAYER_PORT BIT(1)
0019 #define NFP_FLOWER_LAYER_MAC BIT(2)
0020 #define NFP_FLOWER_LAYER_TP BIT(3)
0021 #define NFP_FLOWER_LAYER_IPV4 BIT(4)
0022 #define NFP_FLOWER_LAYER_IPV6 BIT(5)
0023 #define NFP_FLOWER_LAYER_CT BIT(6)
0024 #define NFP_FLOWER_LAYER_VXLAN BIT(7)
0025
0026 #define NFP_FLOWER_LAYER2_GRE BIT(0)
0027 #define NFP_FLOWER_LAYER2_QINQ BIT(4)
0028 #define NFP_FLOWER_LAYER2_GENEVE BIT(5)
0029 #define NFP_FLOWER_LAYER2_GENEVE_OP BIT(6)
0030 #define NFP_FLOWER_LAYER2_TUN_IPV6 BIT(7)
0031
0032 #define NFP_FLOWER_MASK_VLAN_PRIO GENMASK(15, 13)
0033 #define NFP_FLOWER_MASK_VLAN_PRESENT BIT(12)
0034 #define NFP_FLOWER_MASK_VLAN_VID GENMASK(11, 0)
0035
0036 #define NFP_FLOWER_MASK_MPLS_LB GENMASK(31, 12)
0037 #define NFP_FLOWER_MASK_MPLS_TC GENMASK(11, 9)
0038 #define NFP_FLOWER_MASK_MPLS_BOS BIT(8)
0039 #define NFP_FLOWER_MASK_MPLS_Q BIT(0)
0040
0041 #define NFP_FL_IP_FRAG_FIRST BIT(7)
0042 #define NFP_FL_IP_FRAGMENTED BIT(6)
0043
0044
0045 #define NFP_FL_GRE_FLAG_KEY BIT(2)
0046
0047
0048 #define NFP_FL_TCP_FLAG_URG BIT(4)
0049 #define NFP_FL_TCP_FLAG_PSH BIT(3)
0050 #define NFP_FL_TCP_FLAG_RST BIT(2)
0051 #define NFP_FL_TCP_FLAG_SYN BIT(1)
0052 #define NFP_FL_TCP_FLAG_FIN BIT(0)
0053
0054 #define NFP_FL_SC_ACT_DROP 0x80000000
0055 #define NFP_FL_SC_ACT_USER 0x7D000000
0056 #define NFP_FL_SC_ACT_POPV 0x6A000000
0057 #define NFP_FL_SC_ACT_NULL 0x00000000
0058
0059
0060
0061 #define NFP_FL_MAX_A_SIZ 1216
0062 #define NFP_FL_LW_SIZ 2
0063
0064
0065 #define NFP_FL_MAX_GENEVE_OPT_ACT 32
0066 #define NFP_FL_MAX_GENEVE_OPT_CNT 64
0067 #define NFP_FL_MAX_GENEVE_OPT_KEY 32
0068 #define NFP_FL_MAX_GENEVE_OPT_KEY_V6 8
0069
0070
0071 #define NFP_FL_ACTION_OPCODE_OUTPUT 0
0072 #define NFP_FL_ACTION_OPCODE_PUSH_VLAN 1
0073 #define NFP_FL_ACTION_OPCODE_POP_VLAN 2
0074 #define NFP_FL_ACTION_OPCODE_PUSH_MPLS 3
0075 #define NFP_FL_ACTION_OPCODE_POP_MPLS 4
0076 #define NFP_FL_ACTION_OPCODE_SET_TUNNEL 6
0077 #define NFP_FL_ACTION_OPCODE_SET_ETHERNET 7
0078 #define NFP_FL_ACTION_OPCODE_SET_MPLS 8
0079 #define NFP_FL_ACTION_OPCODE_SET_IPV4_ADDRS 9
0080 #define NFP_FL_ACTION_OPCODE_SET_IPV4_TTL_TOS 10
0081 #define NFP_FL_ACTION_OPCODE_SET_IPV6_SRC 11
0082 #define NFP_FL_ACTION_OPCODE_SET_IPV6_DST 12
0083 #define NFP_FL_ACTION_OPCODE_SET_IPV6_TC_HL_FL 13
0084 #define NFP_FL_ACTION_OPCODE_SET_UDP 14
0085 #define NFP_FL_ACTION_OPCODE_SET_TCP 15
0086 #define NFP_FL_ACTION_OPCODE_PRE_LAG 16
0087 #define NFP_FL_ACTION_OPCODE_PRE_TUNNEL 17
0088 #define NFP_FL_ACTION_OPCODE_METER 24
0089 #define NFP_FL_ACTION_OPCODE_PUSH_GENEVE 26
0090 #define NFP_FL_ACTION_OPCODE_NUM 32
0091
0092 #define NFP_FL_OUT_FLAGS_LAST BIT(15)
0093 #define NFP_FL_OUT_FLAGS_USE_TUN BIT(4)
0094 #define NFP_FL_OUT_FLAGS_TYPE_IDX GENMASK(2, 0)
0095
0096 #define NFP_FL_PUSH_VLAN_PRIO GENMASK(15, 13)
0097 #define NFP_FL_PUSH_VLAN_VID GENMASK(11, 0)
0098
0099
0100 #define NFP_FL_LAG_OUT 0xC0DE0000
0101
0102
0103 #define NFP_FL_PORT_TYPE_TUN 0x50000000
0104 #define NFP_FL_TUNNEL_TYPE GENMASK(7, 4)
0105 #define NFP_FL_PRE_TUN_INDEX GENMASK(2, 0)
0106
0107 #define NFP_FLOWER_WORKQ_MAX_SKBS 30000
0108
0109
0110 #define NFP_FL_REPLY_TIMEOUT msecs_to_jiffies(40)
0111
0112 #define nfp_flower_cmsg_warn(app, fmt, args...) \
0113 do { \
0114 if (net_ratelimit()) \
0115 nfp_warn((app)->cpp, fmt, ## args); \
0116 } while (0)
0117
0118 enum nfp_flower_tun_type {
0119 NFP_FL_TUNNEL_NONE = 0,
0120 NFP_FL_TUNNEL_GRE = 1,
0121 NFP_FL_TUNNEL_VXLAN = 2,
0122 NFP_FL_TUNNEL_GENEVE = 4,
0123 };
0124
0125 struct nfp_fl_act_head {
0126 u8 jump_id;
0127 u8 len_lw;
0128 };
0129
0130 struct nfp_fl_set_eth {
0131 struct nfp_fl_act_head head;
0132 __be16 reserved;
0133 u8 eth_addr_mask[ETH_ALEN * 2];
0134 u8 eth_addr_val[ETH_ALEN * 2];
0135 };
0136
0137 struct nfp_fl_set_ip4_addrs {
0138 struct nfp_fl_act_head head;
0139 __be16 reserved;
0140 __be32 ipv4_src_mask;
0141 __be32 ipv4_src;
0142 __be32 ipv4_dst_mask;
0143 __be32 ipv4_dst;
0144 };
0145
0146 struct nfp_fl_set_ip4_ttl_tos {
0147 struct nfp_fl_act_head head;
0148 u8 ipv4_ttl_mask;
0149 u8 ipv4_tos_mask;
0150 u8 ipv4_ttl;
0151 u8 ipv4_tos;
0152 __be16 reserved;
0153 };
0154
0155 struct nfp_fl_set_ipv6_tc_hl_fl {
0156 struct nfp_fl_act_head head;
0157 u8 ipv6_tc_mask;
0158 u8 ipv6_hop_limit_mask;
0159 __be16 reserved;
0160 u8 ipv6_tc;
0161 u8 ipv6_hop_limit;
0162 __be32 ipv6_label_mask;
0163 __be32 ipv6_label;
0164 };
0165
0166 struct nfp_fl_set_ipv6_addr {
0167 struct nfp_fl_act_head head;
0168 __be16 reserved;
0169 struct {
0170 __be32 mask;
0171 __be32 exact;
0172 } ipv6[4];
0173 };
0174
0175 struct nfp_fl_set_tport {
0176 struct nfp_fl_act_head head;
0177 __be16 reserved;
0178 u8 tp_port_mask[4];
0179 u8 tp_port_val[4];
0180 };
0181
0182 struct nfp_fl_output {
0183 struct nfp_fl_act_head head;
0184 __be16 flags;
0185 __be32 port;
0186 };
0187
0188 struct nfp_fl_push_vlan {
0189 struct nfp_fl_act_head head;
0190 __be16 reserved;
0191 __be16 vlan_tpid;
0192 __be16 vlan_tci;
0193 };
0194
0195 struct nfp_fl_pop_vlan {
0196 struct nfp_fl_act_head head;
0197 __be16 reserved;
0198 };
0199
0200 struct nfp_fl_pre_lag {
0201 struct nfp_fl_act_head head;
0202 __be16 group_id;
0203 u8 lag_version[3];
0204 u8 instance;
0205 };
0206
0207 #define NFP_FL_PRE_LAG_VER_OFF 8
0208
0209 struct nfp_fl_pre_tunnel {
0210 struct nfp_fl_act_head head;
0211 __be16 flags;
0212 union {
0213 __be32 ipv4_dst;
0214 struct in6_addr ipv6_dst;
0215 };
0216 };
0217
0218 #define NFP_FL_PRE_TUN_IPV6 BIT(0)
0219
0220 struct nfp_fl_set_tun {
0221 struct nfp_fl_act_head head;
0222 __be16 reserved;
0223 __be64 tun_id __packed;
0224 __be32 tun_type_index;
0225 __be16 tun_flags;
0226 u8 ttl;
0227 u8 tos;
0228 __be16 outer_vlan_tpid;
0229 __be16 outer_vlan_tci;
0230 u8 tun_len;
0231 u8 res2;
0232 __be16 tun_proto;
0233 };
0234
0235 struct nfp_fl_push_geneve {
0236 struct nfp_fl_act_head head;
0237 __be16 reserved;
0238 __be16 class;
0239 u8 type;
0240 u8 length;
0241 u8 opt_data[];
0242 };
0243
0244 struct nfp_fl_push_mpls {
0245 struct nfp_fl_act_head head;
0246 __be16 ethtype;
0247 __be32 lse;
0248 };
0249
0250 struct nfp_fl_pop_mpls {
0251 struct nfp_fl_act_head head;
0252 __be16 ethtype;
0253 };
0254
0255 struct nfp_fl_set_mpls {
0256 struct nfp_fl_act_head head;
0257 __be16 reserved;
0258 __be32 lse_mask;
0259 __be32 lse;
0260 };
0261
0262 struct nfp_fl_meter {
0263 struct nfp_fl_act_head head;
0264 __be16 reserved;
0265 __be32 meter_id;
0266 };
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279 struct nfp_flower_meta_tci {
0280 u8 nfp_flow_key_layer;
0281 u8 mask_id;
0282 __be16 tci;
0283 };
0284
0285
0286
0287
0288
0289
0290
0291
0292
0293 struct nfp_flower_ext_meta {
0294 __be32 nfp_flow_key_layer2;
0295 };
0296
0297
0298
0299
0300
0301
0302
0303
0304
0305 struct nfp_flower_in_port {
0306 __be32 in_port;
0307 };
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321
0322 struct nfp_flower_mac_mpls {
0323 u8 mac_dst[6];
0324 u8 mac_src[6];
0325 __be32 mpls_lse;
0326 };
0327
0328
0329
0330
0331
0332
0333
0334
0335
0336
0337 struct nfp_flower_vlan {
0338 __be16 outer_tpid;
0339 __be16 outer_tci;
0340 __be16 inner_tpid;
0341 __be16 inner_tci;
0342 };
0343
0344
0345
0346
0347
0348
0349
0350
0351 struct nfp_flower_tp_ports {
0352 __be16 port_src;
0353 __be16 port_dst;
0354 };
0355
0356 struct nfp_flower_ip_ext {
0357 u8 tos;
0358 u8 proto;
0359 u8 ttl;
0360 u8 flags;
0361 };
0362
0363
0364
0365
0366
0367
0368
0369
0370
0371
0372
0373
0374 struct nfp_flower_ipv4 {
0375 struct nfp_flower_ip_ext ip_ext;
0376 __be32 ipv4_src;
0377 __be32 ipv4_dst;
0378 };
0379
0380
0381
0382
0383
0384
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405 struct nfp_flower_ipv6 {
0406 struct nfp_flower_ip_ext ip_ext;
0407 __be32 ipv6_flow_label_exthdr;
0408 struct in6_addr ipv6_src;
0409 struct in6_addr ipv6_dst;
0410 };
0411
0412 struct nfp_flower_tun_ipv4 {
0413 __be32 src;
0414 __be32 dst;
0415 };
0416
0417 struct nfp_flower_tun_ipv6 {
0418 struct in6_addr src;
0419 struct in6_addr dst;
0420 };
0421
0422 struct nfp_flower_tun_ip_ext {
0423 u8 tos;
0424 u8 ttl;
0425 };
0426
0427
0428
0429
0430
0431
0432
0433
0434
0435
0436
0437
0438
0439
0440
0441
0442
0443 struct nfp_flower_ipv4_udp_tun {
0444 struct nfp_flower_tun_ipv4 ipv4;
0445 __be16 reserved1;
0446 struct nfp_flower_tun_ip_ext ip_ext;
0447 __be32 reserved2;
0448 __be32 tun_id;
0449 };
0450
0451
0452
0453
0454
0455
0456
0457
0458
0459
0460
0461
0462
0463
0464
0465
0466
0467
0468
0469
0470
0471
0472
0473
0474
0475
0476
0477
0478
0479 struct nfp_flower_ipv6_udp_tun {
0480 struct nfp_flower_tun_ipv6 ipv6;
0481 __be16 reserved1;
0482 struct nfp_flower_tun_ip_ext ip_ext;
0483 __be32 reserved2;
0484 __be32 tun_id;
0485 };
0486
0487
0488
0489
0490
0491
0492
0493
0494
0495
0496
0497
0498
0499
0500
0501
0502
0503
0504
0505
0506 struct nfp_flower_ipv4_gre_tun {
0507 struct nfp_flower_tun_ipv4 ipv4;
0508 __be16 tun_flags;
0509 struct nfp_flower_tun_ip_ext ip_ext;
0510 __be16 reserved1;
0511 __be16 ethertype;
0512 __be32 tun_key;
0513 __be32 reserved2;
0514 };
0515
0516
0517
0518
0519
0520
0521
0522
0523
0524
0525
0526
0527
0528
0529
0530
0531
0532
0533
0534
0535
0536
0537
0538
0539
0540
0541
0542
0543
0544
0545
0546 struct nfp_flower_ipv6_gre_tun {
0547 struct nfp_flower_tun_ipv6 ipv6;
0548 __be16 tun_flags;
0549 struct nfp_flower_tun_ip_ext ip_ext;
0550 __be16 reserved1;
0551 __be16 ethertype;
0552 __be32 tun_key;
0553 __be32 reserved2;
0554 };
0555
0556 struct nfp_flower_geneve_options {
0557 u8 data[NFP_FL_MAX_GENEVE_OPT_KEY];
0558 };
0559
0560 #define NFP_FL_TUN_VNI_OFFSET 8
0561
0562
0563
0564
0565
0566 struct nfp_flower_cmsg_hdr {
0567 __be16 pad;
0568 u8 type;
0569 u8 version;
0570 };
0571
0572 #define NFP_FLOWER_CMSG_HLEN sizeof(struct nfp_flower_cmsg_hdr)
0573 #define NFP_FLOWER_CMSG_VER1 1
0574
0575
0576 enum nfp_flower_cmsg_type_port {
0577 NFP_FLOWER_CMSG_TYPE_FLOW_ADD = 0,
0578 NFP_FLOWER_CMSG_TYPE_FLOW_MOD = 1,
0579 NFP_FLOWER_CMSG_TYPE_FLOW_DEL = 2,
0580 NFP_FLOWER_CMSG_TYPE_LAG_CONFIG = 4,
0581 NFP_FLOWER_CMSG_TYPE_PORT_REIFY = 6,
0582 NFP_FLOWER_CMSG_TYPE_MAC_REPR = 7,
0583 NFP_FLOWER_CMSG_TYPE_PORT_MOD = 8,
0584 NFP_FLOWER_CMSG_TYPE_MERGE_HINT = 9,
0585 NFP_FLOWER_CMSG_TYPE_NO_NEIGH = 10,
0586 NFP_FLOWER_CMSG_TYPE_TUN_MAC = 11,
0587 NFP_FLOWER_CMSG_TYPE_ACTIVE_TUNS = 12,
0588 NFP_FLOWER_CMSG_TYPE_TUN_NEIGH = 13,
0589 NFP_FLOWER_CMSG_TYPE_TUN_IPS = 14,
0590 NFP_FLOWER_CMSG_TYPE_FLOW_STATS = 15,
0591 NFP_FLOWER_CMSG_TYPE_PORT_ECHO = 16,
0592 NFP_FLOWER_CMSG_TYPE_QOS_MOD = 18,
0593 NFP_FLOWER_CMSG_TYPE_QOS_DEL = 19,
0594 NFP_FLOWER_CMSG_TYPE_QOS_STATS = 20,
0595 NFP_FLOWER_CMSG_TYPE_PRE_TUN_RULE = 21,
0596 NFP_FLOWER_CMSG_TYPE_TUN_IPS_V6 = 22,
0597 NFP_FLOWER_CMSG_TYPE_NO_NEIGH_V6 = 23,
0598 NFP_FLOWER_CMSG_TYPE_TUN_NEIGH_V6 = 24,
0599 NFP_FLOWER_CMSG_TYPE_ACTIVE_TUNS_V6 = 25,
0600 NFP_FLOWER_CMSG_TYPE_MAX = 32,
0601 };
0602
0603
0604 struct nfp_flower_cmsg_mac_repr {
0605 u8 reserved[3];
0606 u8 num_ports;
0607 struct {
0608 u8 idx;
0609 u8 info;
0610 u8 nbi_port;
0611 u8 phys_port;
0612 } ports[];
0613 };
0614
0615 #define NFP_FLOWER_CMSG_MAC_REPR_NBI GENMASK(1, 0)
0616
0617
0618 struct nfp_flower_cmsg_portmod {
0619 __be32 portnum;
0620 u8 reserved;
0621 u8 info;
0622 __be16 mtu;
0623 };
0624
0625 #define NFP_FLOWER_CMSG_PORTMOD_INFO_LINK BIT(0)
0626 #define NFP_FLOWER_CMSG_PORTMOD_MTU_CHANGE_ONLY BIT(1)
0627
0628
0629 struct nfp_flower_cmsg_portreify {
0630 __be32 portnum;
0631 u16 reserved;
0632 __be16 info;
0633 };
0634
0635 #define NFP_FLOWER_CMSG_PORTREIFY_INFO_EXIST BIT(0)
0636
0637
0638 struct nfp_flower_cmsg_merge_hint {
0639 u8 reserved[3];
0640 u8 count;
0641 struct {
0642 __be32 host_ctx;
0643 __be64 host_cookie;
0644 } __packed flow[];
0645 };
0646
0647 enum nfp_flower_cmsg_port_type {
0648 NFP_FLOWER_CMSG_PORT_TYPE_UNSPEC = 0x0,
0649 NFP_FLOWER_CMSG_PORT_TYPE_PHYS_PORT = 0x1,
0650 NFP_FLOWER_CMSG_PORT_TYPE_PCIE_PORT = 0x2,
0651 NFP_FLOWER_CMSG_PORT_TYPE_OTHER_PORT = 0x3,
0652 };
0653
0654 enum nfp_flower_cmsg_port_vnic_type {
0655 NFP_FLOWER_CMSG_PORT_VNIC_TYPE_VF = 0x0,
0656 NFP_FLOWER_CMSG_PORT_VNIC_TYPE_PF = 0x1,
0657 NFP_FLOWER_CMSG_PORT_VNIC_TYPE_CTRL = 0x2,
0658 };
0659
0660 #define NFP_FLOWER_CMSG_PORT_TYPE GENMASK(31, 28)
0661 #define NFP_FLOWER_CMSG_PORT_SYS_ID GENMASK(27, 24)
0662 #define NFP_FLOWER_CMSG_PORT_NFP_ID GENMASK(23, 22)
0663 #define NFP_FLOWER_CMSG_PORT_PCI GENMASK(15, 14)
0664 #define NFP_FLOWER_CMSG_PORT_VNIC_TYPE GENMASK(13, 12)
0665 #define NFP_FLOWER_CMSG_PORT_VNIC GENMASK(11, 6)
0666 #define NFP_FLOWER_CMSG_PORT_PCIE_Q GENMASK(5, 0)
0667 #define NFP_FLOWER_CMSG_PORT_PHYS_PORT_NUM GENMASK(7, 0)
0668
0669 static inline u32 nfp_flower_internal_port_get_port_id(u8 internal_port)
0670 {
0671 return FIELD_PREP(NFP_FLOWER_CMSG_PORT_PHYS_PORT_NUM, internal_port) |
0672 FIELD_PREP(NFP_FLOWER_CMSG_PORT_TYPE,
0673 NFP_FLOWER_CMSG_PORT_TYPE_OTHER_PORT);
0674 }
0675
0676 static inline u32 nfp_flower_cmsg_phys_port(u8 phys_port)
0677 {
0678 return FIELD_PREP(NFP_FLOWER_CMSG_PORT_PHYS_PORT_NUM, phys_port) |
0679 FIELD_PREP(NFP_FLOWER_CMSG_PORT_TYPE,
0680 NFP_FLOWER_CMSG_PORT_TYPE_PHYS_PORT);
0681 }
0682
0683 static inline u32
0684 nfp_flower_cmsg_pcie_port(u8 nfp_pcie, enum nfp_flower_cmsg_port_vnic_type type,
0685 u8 vnic, u8 q)
0686 {
0687 return FIELD_PREP(NFP_FLOWER_CMSG_PORT_PCI, nfp_pcie) |
0688 FIELD_PREP(NFP_FLOWER_CMSG_PORT_VNIC_TYPE, type) |
0689 FIELD_PREP(NFP_FLOWER_CMSG_PORT_VNIC, vnic) |
0690 FIELD_PREP(NFP_FLOWER_CMSG_PORT_PCIE_Q, q) |
0691 FIELD_PREP(NFP_FLOWER_CMSG_PORT_TYPE,
0692 NFP_FLOWER_CMSG_PORT_TYPE_PCIE_PORT);
0693 }
0694
0695 static inline void *nfp_flower_cmsg_get_data(struct sk_buff *skb)
0696 {
0697 return (unsigned char *)skb->data + NFP_FLOWER_CMSG_HLEN;
0698 }
0699
0700 static inline int nfp_flower_cmsg_get_data_len(struct sk_buff *skb)
0701 {
0702 return skb->len - NFP_FLOWER_CMSG_HLEN;
0703 }
0704
0705 static inline bool
0706 nfp_fl_netdev_is_tunnel_type(struct net_device *netdev,
0707 enum nfp_flower_tun_type tun_type)
0708 {
0709 if (netif_is_vxlan(netdev))
0710 return tun_type == NFP_FL_TUNNEL_VXLAN;
0711 if (netif_is_gretap(netdev) || netif_is_ip6gretap(netdev))
0712 return tun_type == NFP_FL_TUNNEL_GRE;
0713 if (netif_is_geneve(netdev))
0714 return tun_type == NFP_FL_TUNNEL_GENEVE;
0715
0716 return false;
0717 }
0718
0719 static inline bool nfp_fl_is_netdev_to_offload(struct net_device *netdev)
0720 {
0721 if (!netdev->rtnl_link_ops)
0722 return false;
0723 if (!strcmp(netdev->rtnl_link_ops->kind, "openvswitch"))
0724 return true;
0725 if (netif_is_vxlan(netdev))
0726 return true;
0727 if (netif_is_geneve(netdev))
0728 return true;
0729 if (netif_is_gretap(netdev))
0730 return true;
0731 if (netif_is_ip6gretap(netdev))
0732 return true;
0733
0734 return false;
0735 }
0736
0737 struct sk_buff *
0738 nfp_flower_cmsg_mac_repr_start(struct nfp_app *app, unsigned int num_ports);
0739 void
0740 nfp_flower_cmsg_mac_repr_add(struct sk_buff *skb, unsigned int idx,
0741 unsigned int nbi, unsigned int nbi_port,
0742 unsigned int phys_port);
0743 int nfp_flower_cmsg_portmod(struct nfp_repr *repr, bool carrier_ok,
0744 unsigned int mtu, bool mtu_only);
0745 int nfp_flower_cmsg_portreify(struct nfp_repr *repr, bool exists);
0746 void nfp_flower_cmsg_process_rx(struct work_struct *work);
0747 void nfp_flower_cmsg_rx(struct nfp_app *app, struct sk_buff *skb);
0748 struct sk_buff *
0749 nfp_flower_cmsg_alloc(struct nfp_app *app, unsigned int size,
0750 enum nfp_flower_cmsg_type_port type, gfp_t flag);
0751
0752 #endif