diff options
| author | Arturs Artamonovs <dos21h@gmail.com> | 2024-04-09 06:55:39 +0100 | 
|---|---|---|
| committer | Arturs Artamonovs <dos21h@gmail.com> | 2024-04-09 06:55:39 +0100 | 
| commit | 43c513ea604c77e71333d8307bdb9b710b091721 (patch) | |
| tree | 27d5382aa1de245ff5028f6c558aa354d3bfa994 /md/notes/kernel | |
| parent | 3164a32dd4d5849fa19fe34a2c2eba03edf5f87e (diff) | |
| download | md-content-43c513ea604c77e71333d8307bdb9b710b091721.tar.gz md-content-43c513ea604c77e71333d8307bdb9b710b091721.zip  | |
Add netlink socket
Diffstat (limited to 'md/notes/kernel')
| -rw-r--r-- | md/notes/kernel/netlink_socket.md | 50 | ||||
| -rw-r--r-- | md/notes/kernel/topics.md | 12 | 
2 files changed, 36 insertions, 26 deletions
diff --git a/md/notes/kernel/netlink_socket.md b/md/notes/kernel/netlink_socket.md index 01e9043..e022e52 100644 --- a/md/notes/kernel/netlink_socket.md +++ b/md/notes/kernel/netlink_socket.md @@ -3,11 +3,11 @@ keywords: kernel,linux,netlink,socket  # Kernel compile "Hello world" -Compile minimal linux kernel module.  +As base start from minimal kernel module  ## Files -You need to create to files __Makefile__ and __hello_world.c__. +You need to create to files __Makefile__ and __netlink_socket.c__.  __Makefile__  ```Makefile @@ -206,51 +206,51 @@ create utility that connects and interacts with netlink socket.  int main(int argc, char **argv) { -    struct sockaddr_nl src_addr; -    struct sockaddr_nl dest_addr; -    struct nlmsghdr *nlh; -    struct msghdr msg; -    struct iovec iov; -    int sock_fd; -    int ret; +	struct sockaddr_nl src_addr; +	struct sockaddr_nl dest_addr; +	struct nlmsghdr *nlh; +	struct msghdr msg; +	struct iovec iov; +	int sock_fd; +	int ret; -    sock_fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_PROTO); +	sock_fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_PROTO);  	if (sock_fd < 0)  	{  		printf("socket creation for NETLINK failed...\n");  		return -1;  	} -    memset(&src_addr, 0, sizeof(src_addr)); +	memset(&src_addr, 0, sizeof(src_addr));  	src_addr.nl_family = AF_NETLINK;  	src_addr.nl_pid = getpid();  	bind(sock_fd, (struct sockaddr*)&src_addr, sizeof(src_addr)); -    nlh = (struct nlmsghdr *)malloc(NLMSG_SPACE(PAYLOAD_SIZE)); +	nlh = (struct nlmsghdr *)malloc(NLMSG_SPACE(PAYLOAD_SIZE));  	memset(nlh, 0, NLMSG_SPACE(PAYLOAD_SIZE));  	nlh->nlmsg_len = NLMSG_SPACE(PAYLOAD_SIZE);  	nlh->nlmsg_pid = getpid();  	nlh->nlmsg_flags = 0; -    strcpy(NLMSG_DATA(nlh), "Test test Test!"); +	strcpy(NLMSG_DATA(nlh), "Test test Test!"); -    memset(&dest_addr, 0, sizeof(dest_addr)); +	memset(&dest_addr, 0, sizeof(dest_addr));  	dest_addr.nl_family = AF_NETLINK;  	dest_addr.nl_pid = 0;		// Linux Kernel PID  	dest_addr.nl_groups = 0; -    memset(&iov, 0, sizeof(iov)); -    iov.iov_base = (void *)nlh; -    iov.iov_len = nlh->nlmsg_len; +	memset(&iov, 0, sizeof(iov)); +	iov.iov_base = (void *)nlh; +	iov.iov_len = nlh->nlmsg_len; -    memset(&msg, 0, sizeof(msg)); -    msg.msg_name = (void *)&dest_addr; -    msg.msg_namelen = sizeof(dest_addr); -    msg.msg_iov = &iov; -    msg.msg_iovlen = 1; +	memset(&msg, 0, sizeof(msg)); +	msg.msg_name = (void *)&dest_addr; +	msg.msg_namelen = sizeof(dest_addr); +	msg.msg_iov = &iov; +	msg.msg_iovlen = 1; -    ret = sendmsg(sock_fd, &msg, 0); +	ret = sendmsg(sock_fd, &msg, 0);  	printf("Message sent, payload: %s\n", (char *)NLMSG_DATA(nlh));  	// Clear netlink packet payload: @@ -260,9 +260,9 @@ int main(int argc, char **argv) {  	ret = recvmsg(sock_fd, &msg, 0);  	printf("Message received, payload: %s\n", (char *)NLMSG_DATA(nlh)); -    close(sock_fd); +	close(sock_fd); -    return 0; +	return 0;  }  ``` diff --git a/md/notes/kernel/topics.md b/md/notes/kernel/topics.md index d955193..8682aeb 100644 --- a/md/notes/kernel/topics.md +++ b/md/notes/kernel/topics.md @@ -5,7 +5,10 @@ keywords:blog,projects  Linux kernel programming topics, mostly for those who have some programming  experience and linux command line expertise. Making notes on all fundamental  -kernel API's.  +kernel API's and gathering all examples from all over the internet, all is +compiled and test on Raspberry Pi 4 kernel 6.6.20. No other versions of kernel +is checked. With move one to new SoC or new kernel all examples will also update +accordingly.   ## Topic @@ -47,7 +50,14 @@ kernel API's.  <!-- Virtual Pinctrl driver -->  <!-- Create key logger  -->    <!-- Create device tree entry  -->   +<!-- Netfilter ICMP filter --> +<!-- Bpf filter --> +  ### Kernel userspace +[Netlink show ip](/notes/kernel/netlink_show_ip.md)    +<!-- Netfilter set ip --> +<!-- khttpd --> +  | 
