From: Michael 'Mickey' Lauer Date: Sun, 3 Jan 2010 11:51:18 +0000 (+0100) Subject: linux: add syscall(2), gettid(2), and add more netlink constants X-Git-Tag: 0.7.10~133 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ece98d2e2e38b21407d508079776c37cef15979e;p=thirdparty%2Fvala.git linux: add syscall(2), gettid(2), and add more netlink constants --- diff --git a/vapi/linux.vapi b/vapi/linux.vapi index 8c6d3477b..5b029ed4e 100644 --- a/vapi/linux.vapi +++ b/vapi/linux.vapi @@ -1,5 +1,7 @@ /** - * Copyright (C) 2009 Michael 'Mickey' Lauer + * linux.vapi + * + * Copyright (C) 2009-2010 Michael 'Mickey' Lauer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -15,7 +17,7 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - */ + **/ [CCode (cprefix = "", lower_case_cprefix = "")] namespace Linux { @@ -247,6 +249,20 @@ namespace Linux { [CCode (cheader_filename = "utmp.h")] public int login_tty (int fd); + // emulate gettid(2) for which no glib wrapper exists via syscall + public Posix.pid_t gettid() { + return (Posix.pid_t) syscall( SysCall.gettid ); + } + + // syscall(2) + [CCode (cprefix = "SYS_", cname = "int")] + public enum SysCall { + gettid + } + + [CCode (cname = "syscall", cheader_filename = "unistd.h,sys/syscall.h")] + public int syscall (int number, ...); + // mremap(2) [CCode (cprefix = "MREMAP_", cheader_filename = "sys/mman.h")] public enum MremapFlags { @@ -255,8 +271,7 @@ namespace Linux { } [CCode (cheader_filename = "sys/mman.h")] - public void *mremap(void *old_address, size_t old_size, size_t new_size, - MremapFlags flags); + public void *mremap(void *old_address, size_t old_size, size_t new_size, MremapFlags flags); /* * Network @@ -1655,7 +1670,7 @@ namespace Linux { /* * Netlink subsystem */ - [CCode (cprefix = "", lower_case_cprefix = "")] + [CCode (cprefix = "", lower_case_cprefix = "", cheader_filename = "linux/netlink.h")] namespace Netlink { [CCode (cheader_filename = "linux/netlink.h")] @@ -1697,14 +1712,7 @@ namespace Linux { [CCode (cheader_filename = "linux/netlink.h")] public const int NETLINK_ECRYPTFS; - // additions to the socket interface (non-posix) - [CCode (cheader_filename = "sys/socket.h")] - public const int AF_NETLINK; - [CCode (cheader_filename = "sys/socket.h")] - public const int SOCK_NONBLOCK; - [CCode (cheader_filename = "sys/socket.h")] - public const int SOCK_CLOEXEC; - + // netlink socket, can be used instead of sockaddr [CCode (cname = "struct sockaddr_nl", cheader_filename = "linux/netlink.h", destroy_function = "")] public struct SockAddrNl { public int nl_family; @@ -1713,9 +1721,106 @@ namespace Linux { public uint32 nl_groups; } + // netlink message header + [CCode (cname = "struct nlmsghdr", cheader_filename = "linux/netlink.h", destroy_function = "")] + public struct NlMsgHdr { + public uint32 nlmsg_len; + public uint16 nlmsg_type; + public uint16 nlmsg_flags; + public uint32 nlmsg_seq; + public uint32 nlmsg_pid; + } + + // netlink error message + [CCode (cname = "struct nlmsgerr", cheader_filename = "linux/netlink.h", destroy_function = "")] + public struct NlMsgErr { + public int error; + public NlMsgHdr msg; + } + + // rtnetlink multicast groups ( userland compatibility values ) + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTMGRP_LINK; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTMGRP_NOTIFY; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTMGRP_NEIGH; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTMGRP_TC; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTMGRP_IPV4_IFADDR; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTMGRP_IPV4_MROUTE; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTMGRP_IPV4_ROUTE; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTMGRP_IPV4_RULE; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTMGRP_IPV6_IFADDR; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTMGRP_IPV6_MROUTE; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTMGRP_IPV6_ROUTE; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTMGRP_IPV6_IFINFO; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTMGRP_DECnet_IFADDR; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTMGRP_DECnet_ROUTE; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTMGRP_IPV6_PREFIX; + + // rtnetlink multicast groups ( 1 << group ) + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_NONE; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_LINK; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_NOTIFY; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_NEIGH; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_TC; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_IPV4_IFADDR; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_IPV4_MROUTE; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_IPV4_ROUTE; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_IPV4_RULE; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_IPV6_IFADDR; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_IPV6_MROUTE; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_IPV6_ROUTE; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_IPV6_IFINFO; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_DECnet_IFADDR; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_NOP2; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_DECnet_ROUTE; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_DECnet_RULE; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_NOP4; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_IPV6_PREFIX; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_IPV6_RULE; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_ND_USEROPT; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_PHONET_IFADDR; + [CCode (cheader_filename = "linux/rtnetlink.h")] + public const int RTNLGRP_PHONET_ROUTE; + /* [CCode (cheader_filename = "sys/socket.h", sentinel = "")] - public int bind (int sockfd, SockAddrNl addr, ulong length ); + public int bind (int sockfd, SockAddrNl addr, ulong length); */ } @@ -1743,6 +1848,26 @@ namespace Linux { public const int RTC_WKALM_SET; } + /* + * Socket extensions (non-posix) + */ + [CCode (cprefix = "", lower_case_cprefix = "")] + namespace Socket { + [CCode (cheader_filename = "sys/socket.h")] + public const int AF_NETLINK; + [CCode (cheader_filename = "sys/socket.h")] + public const int SOCK_NONBLOCK; + [CCode (cheader_filename = "sys/socket.h")] + public const int SOCK_CLOEXEC; + + [CCode (cname = "struct ucred", cheader_filename = "linux/socket.h", destroy_function = "")] + public struct ucred { + public uint32 pid; + public uint32 uid; + public uint32 gid; + } + } + /* * Terminal input/output */