1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*f80ad8b4SAndroid Build Coastguard Worker /* 3*f80ad8b4SAndroid Build Coastguard Worker * Management Component Transport Protocol (MCTP) 4*f80ad8b4SAndroid Build Coastguard Worker * 5*f80ad8b4SAndroid Build Coastguard Worker * Copyright (c) 2021 Code Construct 6*f80ad8b4SAndroid Build Coastguard Worker * Copyright (c) 2021 Google 7*f80ad8b4SAndroid Build Coastguard Worker */ 8*f80ad8b4SAndroid Build Coastguard Worker 9*f80ad8b4SAndroid Build Coastguard Worker #ifndef __UAPI_MCTP_H 10*f80ad8b4SAndroid Build Coastguard Worker #define __UAPI_MCTP_H 11*f80ad8b4SAndroid Build Coastguard Worker 12*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h> 13*f80ad8b4SAndroid Build Coastguard Worker #include <linux/socket.h> 14*f80ad8b4SAndroid Build Coastguard Worker #include <linux/netdevice.h> 15*f80ad8b4SAndroid Build Coastguard Worker 16*f80ad8b4SAndroid Build Coastguard Worker typedef __u8 mctp_eid_t; 17*f80ad8b4SAndroid Build Coastguard Worker 18*f80ad8b4SAndroid Build Coastguard Worker struct mctp_addr { 19*f80ad8b4SAndroid Build Coastguard Worker mctp_eid_t s_addr; 20*f80ad8b4SAndroid Build Coastguard Worker }; 21*f80ad8b4SAndroid Build Coastguard Worker 22*f80ad8b4SAndroid Build Coastguard Worker struct sockaddr_mctp { 23*f80ad8b4SAndroid Build Coastguard Worker __kernel_sa_family_t smctp_family; 24*f80ad8b4SAndroid Build Coastguard Worker __u16 __smctp_pad0; 25*f80ad8b4SAndroid Build Coastguard Worker unsigned int smctp_network; 26*f80ad8b4SAndroid Build Coastguard Worker struct mctp_addr smctp_addr; 27*f80ad8b4SAndroid Build Coastguard Worker __u8 smctp_type; 28*f80ad8b4SAndroid Build Coastguard Worker __u8 smctp_tag; 29*f80ad8b4SAndroid Build Coastguard Worker __u8 __smctp_pad1; 30*f80ad8b4SAndroid Build Coastguard Worker }; 31*f80ad8b4SAndroid Build Coastguard Worker 32*f80ad8b4SAndroid Build Coastguard Worker struct sockaddr_mctp_ext { 33*f80ad8b4SAndroid Build Coastguard Worker struct sockaddr_mctp smctp_base; 34*f80ad8b4SAndroid Build Coastguard Worker int smctp_ifindex; 35*f80ad8b4SAndroid Build Coastguard Worker __u8 smctp_halen; 36*f80ad8b4SAndroid Build Coastguard Worker __u8 __smctp_pad0[3]; 37*f80ad8b4SAndroid Build Coastguard Worker __u8 smctp_haddr[MAX_ADDR_LEN]; 38*f80ad8b4SAndroid Build Coastguard Worker }; 39*f80ad8b4SAndroid Build Coastguard Worker 40*f80ad8b4SAndroid Build Coastguard Worker #define MCTP_NET_ANY 0x0 41*f80ad8b4SAndroid Build Coastguard Worker 42*f80ad8b4SAndroid Build Coastguard Worker #define MCTP_ADDR_NULL 0x00 43*f80ad8b4SAndroid Build Coastguard Worker #define MCTP_ADDR_ANY 0xff 44*f80ad8b4SAndroid Build Coastguard Worker 45*f80ad8b4SAndroid Build Coastguard Worker #define MCTP_TAG_MASK 0x07 46*f80ad8b4SAndroid Build Coastguard Worker #define MCTP_TAG_OWNER 0x08 47*f80ad8b4SAndroid Build Coastguard Worker #define MCTP_TAG_PREALLOC 0x10 48*f80ad8b4SAndroid Build Coastguard Worker 49*f80ad8b4SAndroid Build Coastguard Worker #define MCTP_OPT_ADDR_EXT 1 50*f80ad8b4SAndroid Build Coastguard Worker 51*f80ad8b4SAndroid Build Coastguard Worker #define SIOCMCTPALLOCTAG (SIOCPROTOPRIVATE + 0) 52*f80ad8b4SAndroid Build Coastguard Worker #define SIOCMCTPDROPTAG (SIOCPROTOPRIVATE + 1) 53*f80ad8b4SAndroid Build Coastguard Worker #define SIOCMCTPALLOCTAG2 (SIOCPROTOPRIVATE + 2) 54*f80ad8b4SAndroid Build Coastguard Worker #define SIOCMCTPDROPTAG2 (SIOCPROTOPRIVATE + 3) 55*f80ad8b4SAndroid Build Coastguard Worker 56*f80ad8b4SAndroid Build Coastguard Worker /* Deprecated: use mctp_ioc_tag_ctl2 / TAG2 ioctls instead, which defines the 57*f80ad8b4SAndroid Build Coastguard Worker * MCTP network ID as part of the allocated tag. Using this assumes the default 58*f80ad8b4SAndroid Build Coastguard Worker * net ID for allocated tags, which may not give correct behaviour on system 59*f80ad8b4SAndroid Build Coastguard Worker * with multiple networks configured. 60*f80ad8b4SAndroid Build Coastguard Worker */ 61*f80ad8b4SAndroid Build Coastguard Worker struct mctp_ioc_tag_ctl { 62*f80ad8b4SAndroid Build Coastguard Worker mctp_eid_t peer_addr; 63*f80ad8b4SAndroid Build Coastguard Worker 64*f80ad8b4SAndroid Build Coastguard Worker /* For SIOCMCTPALLOCTAG: must be passed as zero, kernel will 65*f80ad8b4SAndroid Build Coastguard Worker * populate with the allocated tag value. Returned tag value will 66*f80ad8b4SAndroid Build Coastguard Worker * always have TO and PREALLOC set. 67*f80ad8b4SAndroid Build Coastguard Worker * 68*f80ad8b4SAndroid Build Coastguard Worker * For SIOCMCTPDROPTAG: userspace provides tag value to drop, from 69*f80ad8b4SAndroid Build Coastguard Worker * a prior SIOCMCTPALLOCTAG call (and so must have TO and PREALLOC set). 70*f80ad8b4SAndroid Build Coastguard Worker */ 71*f80ad8b4SAndroid Build Coastguard Worker __u8 tag; 72*f80ad8b4SAndroid Build Coastguard Worker __u16 flags; 73*f80ad8b4SAndroid Build Coastguard Worker }; 74*f80ad8b4SAndroid Build Coastguard Worker 75*f80ad8b4SAndroid Build Coastguard Worker struct mctp_ioc_tag_ctl2 { 76*f80ad8b4SAndroid Build Coastguard Worker /* Peer details: network ID, peer EID, local EID. All set by the 77*f80ad8b4SAndroid Build Coastguard Worker * caller. 78*f80ad8b4SAndroid Build Coastguard Worker * 79*f80ad8b4SAndroid Build Coastguard Worker * Local EID must be MCTP_ADDR_NULL or MCTP_ADDR_ANY in current 80*f80ad8b4SAndroid Build Coastguard Worker * kernels. 81*f80ad8b4SAndroid Build Coastguard Worker */ 82*f80ad8b4SAndroid Build Coastguard Worker unsigned int net; 83*f80ad8b4SAndroid Build Coastguard Worker mctp_eid_t peer_addr; 84*f80ad8b4SAndroid Build Coastguard Worker mctp_eid_t local_addr; 85*f80ad8b4SAndroid Build Coastguard Worker 86*f80ad8b4SAndroid Build Coastguard Worker /* Set by caller, but no flags defined currently. Must be 0 */ 87*f80ad8b4SAndroid Build Coastguard Worker __u16 flags; 88*f80ad8b4SAndroid Build Coastguard Worker 89*f80ad8b4SAndroid Build Coastguard Worker /* For SIOCMCTPALLOCTAG2: must be passed as zero, kernel will 90*f80ad8b4SAndroid Build Coastguard Worker * populate with the allocated tag value. Returned tag value will 91*f80ad8b4SAndroid Build Coastguard Worker * always have TO and PREALLOC set. 92*f80ad8b4SAndroid Build Coastguard Worker * 93*f80ad8b4SAndroid Build Coastguard Worker * For SIOCMCTPDROPTAG2: userspace provides tag value to drop, from 94*f80ad8b4SAndroid Build Coastguard Worker * a prior SIOCMCTPALLOCTAG2 call (and so must have TO and PREALLOC set). 95*f80ad8b4SAndroid Build Coastguard Worker */ 96*f80ad8b4SAndroid Build Coastguard Worker __u8 tag; 97*f80ad8b4SAndroid Build Coastguard Worker 98*f80ad8b4SAndroid Build Coastguard Worker }; 99*f80ad8b4SAndroid Build Coastguard Worker 100*f80ad8b4SAndroid Build Coastguard Worker #endif /* __UAPI_MCTP_H */ 101