~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/include/net/scm.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef __LINUX_NET_SCM_H
  2 #define __LINUX_NET_SCM_H
  3 
  4 /* Well, we should have at least one descriptor open
  5  * to accept passed FDs 8)
  6  */
  7 #define SCM_MAX_FD      (OPEN_MAX-1)
  8 
  9 struct scm_fp_list
 10 {
 11         int             count;
 12         struct file     *fp[SCM_MAX_FD];
 13 };
 14 
 15 struct scm_cookie
 16 {
 17         struct ucred            creds;          /* Skb credentials      */
 18         struct scm_fp_list      *fp;            /* Passed files         */
 19         unsigned long           seq;            /* Connection seqno     */
 20 };
 21 
 22 extern void scm_detach_fds(struct msghdr *msg, struct scm_cookie *scm);
 23 extern int __scm_send(struct socket *sock, struct msghdr *msg, struct scm_cookie *scm);
 24 extern void __scm_destroy(struct scm_cookie *scm);
 25 extern struct scm_fp_list * scm_fp_dup(struct scm_fp_list *fpl);
 26 
 27 static __inline__ void scm_destroy(struct scm_cookie *scm)
 28 {
 29         if (scm && scm->fp)
 30                 __scm_destroy(scm);
 31 }
 32 
 33 static __inline__ int scm_send(struct socket *sock, struct msghdr *msg,
 34                                struct scm_cookie *scm)
 35 {
 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)
 41                 return 0;
 42         return __scm_send(sock, msg, scm);
 43 }
 44 
 45 static __inline__ void scm_recv(struct socket *sock, struct msghdr *msg,
 46                                 struct scm_cookie *scm, int flags)
 47 {
 48         if (!msg->msg_control)
 49         {
 50                 if (sock->passcred || scm->fp)
 51                         msg->msg_flags |= MSG_CTRUNC;
 52                 scm_destroy(scm);
 53                 return;
 54         }
 55 
 56         if (sock->passcred)
 57                 put_cmsg(msg, SOL_SOCKET, SCM_CREDENTIALS, sizeof(scm->creds), &scm->creds);
 58 
 59         if (!scm->fp)
 60                 return;
 61         
 62         scm_detach_fds(msg, scm);
 63 }
 64 
 65 
 66 #endif __LINUX_NET_SCM_H
 67 
 68 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.