OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [net/] [scm.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
#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
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.