1 #ifndef __LINUX_NET_SCM_H 2 #define __LINUX_NET_SCM_H 4 /* Well, we should have at least one descriptor open 5 * to accept passed FDs 8) 7 #define SCM_MAX_FD (OPEN_MAX-1) 12 struct file
*fp
[SCM_MAX_FD
]; 17 struct ucred creds
;/* Skb credentials */ 18 struct scm_fp_list
*fp
;/* Passed files */ 19 unsigned long seq
;/* Connection seqno */ 22 externvoidscm_detach_fds(struct msghdr
*msg
,struct scm_cookie
*scm
); 23 externint__scm_send(struct socket
*sock
,struct msghdr
*msg
,struct scm_cookie
*scm
); 24 externvoid__scm_destroy(struct scm_cookie
*scm
); 25 externstruct scm_fp_list
*scm_fp_dup(struct scm_fp_list
*fpl
); 27 static __inline__
voidscm_destroy(struct scm_cookie
*scm
) 33 static __inline__
intscm_send(struct socket
*sock
,struct msghdr
*msg
, 34 struct scm_cookie
*scm
) 36 memset(scm
,0,sizeof(*scm
)); 37 scm
->creds
.uid
= current
->uid
; 38 scm
->creds
.gid
= current
->gid
; 39 scm
->creds
.pid
= current
->pid
; 40 if(msg
->msg_controllen
<=0) 42 return__scm_send(sock
, msg
, scm
); 45 static __inline__
voidscm_recv(struct socket
*sock
,struct msghdr
*msg
, 46 struct scm_cookie
*scm
,int flags
) 50 if(sock
->passcred
|| scm
->fp
) 51 msg
->msg_flags
|= MSG_CTRUNC
; 57 put_cmsg(msg
, SOL_SOCKET
, SCM_CREDENTIALS
,sizeof(scm
->creds
), &scm
->creds
); 62 scm_detach_fds(msg
, scm
); 66 #endif __LINUX_NET_SCM_H