socket()接口与内核协议栈的挂接

本文分析了Linux系统中ioctl接口和RTNETLINK在进行网络管理操作时的不同实现路径,特别是针对网桥及网卡的管理。通过对glibc到系统调用的流程梳理,以及对PF_NETLINK协议簇的探讨,揭示了两种方式背后的设计思路和技术细节。
摘要由CSDN通过智能技术生成
最近在看Brdige的代码,发现一个问题,同样的调用ioctl接口实现添加网桥、删除网桥、网桥增加网卡、网桥删除网卡等操作,一个应用层的接口,却通过两条路径实现,sock_ioctl和RTNETLINK(这本就不是一个级别的东西),而应用层的brctl-utils源码中并没有直接使用PF_NETLINK协议簇的情况,让我感到非常奇怪,因此想把glibc到系统调用,到协议簇注册,以及和VFS的关系再理一下。
  这篇博客主要分析框架和流程,对于一些具体的细节,并不取讨论。所谓框架,指关键的数据结构、操作以及逻辑分层。此篇博客耗时12小时。
  1、socket()到系统调用
  Linux下,用户空间的调用的socket()接口由glibc实现,man socket如下,三个参数domain,type和protocol:
  1
  2
  3
  4
  5
  6
  7
  NAME
  socket - create an endpoint for communication
  SYNOPSIS
  #include <sys/socket.h>
  int socket(int domain, int type, int protocol);
  libc实现系统调用同名函数通常使用INT 0x80 + 系统调用号的方式陷入内核,一般来说,read对应sys_read,write对应sys_write.但是,socket系列却不是这样,为了节约系统调用号,将所有的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值