[netfilter-cvslog] r4150 - trunk/libnfnetlink
laforge at netfilter.org
laforge at netfilter.org
Mon Jul 25 19:16:56 CEST 2005
Author: laforge at netfilter.org
Date: 2005-07-25 19:16:55 +0200 (Mon, 25 Jul 2005)
New Revision: 4150
Modified:
trunk/libnfnetlink/libnfnetlink.c
trunk/libnfnetlink/libnfnetlink.h
Log:
- use peer address of handle when sending message in nfnl_send()
- add new nfnl_sendmsg() and nfnl_sendiov() send variants
- add new nfnl_build_nfa_iovec() function
Modified: trunk/libnfnetlink/libnfnetlink.c
===================================================================
--- trunk/libnfnetlink/libnfnetlink.c 2005-07-25 01:05:48 UTC (rev 4149)
+++ trunk/libnfnetlink/libnfnetlink.c 2005-07-25 17:16:55 UTC (rev 4150)
@@ -121,17 +121,33 @@
*/
int nfnl_send(struct nfnl_handle *nfnlh, struct nlmsghdr *n)
{
- struct sockaddr_nl nladdr;
-
- memset(&nladdr, 0, sizeof(nladdr));
- nladdr.nl_family = AF_NETLINK;
-
nfnl_debug_dump_packet(n, n->nlmsg_len+sizeof(*n), "nfnl_send");
return sendto(nfnlh->fd, n, n->nlmsg_len, 0,
- (struct sockaddr *)&nladdr, sizeof(nladdr));
+ (struct sockaddr *)&nfnlh->peer, sizeof(nfnlh->peer));
}
+int nfnl_sendmsg(const struct nfnl_handle *nfnlh, const struct msghdr *msg,
+ unsigned int flags)
+{
+ return sendmsg(nfnlh->fd, msg, flags);
+}
+
+int nfnl_sendiov(const struct nfnl_handle *nfnlh, const struct iovec *iov,
+ unsigned int num, unsigned int flags)
+{
+ struct msghdr msg;
+
+ msg.msg_name = (struct sockaddr *) &nfnlh->peer;
+ msg.msg_namelen = sizeof(nfnlh->peer);
+ msg.msg_iov = (struct iovec *) iov;
+ msg.msg_control = NULL;
+ msg.msg_controllen = 0;
+ msg.msg_flags = 0;
+
+ return nfnl_sendmsg(nfnlh, &msg, flags);
+}
+
/**
* nfnl_fill_hdr - fill in netlink and nfnetlink header
*
@@ -494,3 +510,22 @@
return 0;
}
+
+/**
+ * nfnl_build_nfa_iovec - Build two iovec's from tag, length and value
+ *
+ * iov: pointer to array of two 'struct iovec' (caller-allocated)
+ * nfa: pointer to 'struct nfattr' (caller-allocated)
+ * type: type (tag) of attribute
+ * len: length of value
+ * val: pointer to buffer containing 'value'
+ *
+ */
+void nfnl_build_nfa_iovec(struct iovec *iov, struct nfattr *nfa,
+ u_int16_t type, u_int32_t len, unsigned char *val)
+{
+ iov[0].iov_base = nfa;
+ iov[0].iov_len = sizeof(*nfa);
+ iov[1].iov_base = val;
+ iov[1].iov_len = NFA_ALIGN(len);
+}
Modified: trunk/libnfnetlink/libnfnetlink.h
===================================================================
--- trunk/libnfnetlink/libnfnetlink.h 2005-07-25 01:05:48 UTC (rev 4149)
+++ trunk/libnfnetlink/libnfnetlink.h 2005-07-25 17:16:55 UTC (rev 4150)
@@ -28,8 +28,12 @@
extern int nfnl_open(struct nfnl_handle *, u_int8_t, unsigned int);
extern int nfnl_close(struct nfnl_handle *);
extern int nfnl_send(struct nfnl_handle *, struct nlmsghdr *);
+extern int nfnl_sendmsg(const struct nfnl_handle *, const struct msghdr *msg,
+ unsigned int flags);
+extern int nfnl_sendiov(const struct nfnl_handle *nfnlh,
+ const struct iovec *iov, unsigned int num,
+ unsigned int flags);
-
extern void nfnl_fill_hdr(struct nfnl_handle *, struct nlmsghdr *,
unsigned int, u_int8_t, u_int16_t, u_int16_t,
u_int16_t);
@@ -58,5 +62,9 @@
#define nfnl_nest_end(nlh, tail) \
({ (tail)->nfa_len = (void *) NLMSG_TAIL(nlh) - (void *) tail; })
+extern void nfnl_build_nfa_iovec(struct iovec *iov, struct nfattr *nfa,
+ u_int16_t type, u_int32_t len,
+ unsigned char *val);
+
extern void nfnl_dump_packet(struct nlmsghdr *, int, char *);
#endif /* __LIBNFNETLINK_H */
More information about the netfilter-cvslog
mailing list