Articles of networking

多NIC和Docker容器

我正在尝试解决有关Docker容器和路由的特定问题。 Docker主机正在运行几个networking接口(3G USB调制解调器),每个networking接口都可以上网。 所以,总之, eth0 – WAN IP 1 ppp0 – WAN IP 2 ppp1 – WAN IP 3 ppp2 – 广域网IP 4 如果我想让容器使用特定的容器,如何指定每个容器应该使用哪个NIC?

如何用connman设置以太网接口的MAC地址

我有一个embedded式系统,需要我从闪存中取出一个MAC地址,并在启动时将它传递给以太网接口。 传统上,我已经修改了在init脚本中对ifconfig的调用,只是hw ether闪存中取出的MAC作为hw etherparameter passing。 我正在使用的系统使用connman来处理networking连接。 embedded式系统在闪存中将始终有一个单一的以太网连接和一个自定义格式的匹配MAC地址。 connman被用来当接口可用时改变,所以有一个dynamic的系统来处理接口的上下和configuration是有帮助的。 是否有可能通过MAC来connman以类似的方式使用我之前做过的ifconfig,如果是的话,怎么样? 另外,是否有可能将MAC作为引导parameter passing给内核,以使connman永远不必知道这一点? 我可以将U-Boot中的MAC从闪存中取出,但以太网设备不可用于U-Boot。

硬中断和softirq

在linux下,当网卡收到一个包时,会触发一个硬中断,然后在中断的callback函数中,会调出一个NET_RX_SOFTIRQ,这个softirq是否会和硬irq在同一个cpu上运行?

如何在Raspberry Pi上安装libjpeg62-dev?

我正在按照教程https://pimylifeup.com/raspberry-pi-webcam-server/构build一个用于覆盆子pi相机stream的web服务器。 我有问题:./motion:加载共享库时出错:libavformat.so.53:无法打开共享对象文件:没有这样的文件或目录 我search了很多解决scheme之后,有人说要安装: sudo apt-get install -y libjpeg62 libjpeg62-dev libavformat53 libavformat-dev libavcodec53 libavcodec-dev libavutil51 libavutl-dev libc6-dev zlib1g-dev libmysqlclient18 libmysqlclient-dev libpq5 libpq-dev 但是我得到这些错误: E: Package 'libjpeg62-dev' has no installation candidate E: Unable to locate package libavformat53 E: Unable to locate package libavcodec53 E: Unable to locate package libavutil51 我search了很长时间,但没有find解决scheme来安装libjepg62-dev 。

为什么/ etc / network / interfaces在程序化更改和后续重启之后会变空?

我在提供Web UI的embedded式设备上运行node.js服务器,以允许用户修改networking接口设置 – 例如,从静态更改为DHCP或反之,或设置特定的静态IP设置(networking掩码,网关)等。通过这些用户驱动的configuration参数,我能够以编程方式生成一个新的/ etc / network / interfaces文件(当然,在将以前的文件备份到/etc/network/interfaces.bak文件之后)。 我甚至对新configuration文件的日志文件做一个“cat / etc / network / interfaces”来确认新的接口文件的内容和语法的有效性。 到目前为止,一切都是疯狂的。 但是,如果在我的设备上重新启动(有或没有/etc/init.d/networking停止/重新启动前启动),我发现系统多次出现一个空的/ etc / network / interfaces文件因此,没有networking接口。 (幸运的是,我有一个允许SSH连接的JTAG接口,所以仍然可以连接到我的设备,但是对于用户来说,他们的设备基本上是砖砌的。) 什么会导致操作系统空白/ etc / network / interfaces文件? 我认为这必须在系统初始化时完成 – 但是出于什么原因呢? 如果我使用文本编辑器手动进行相同的更改并重启,则一切正常 – 每次都会出现新的界面设置。 我无法解释可能导致这种行为的原因。 – 以下是我考虑但已排除的其他因素: 也许文件没有正确保存? 我排除了这个,因为cat命令会显示它已经成功保存了。 也许有其他文件(或持久性设置)需要修改,没有这些configuration被认为是无效的和消隐? 我排除了这一点,因为我的理解是接口文件是接口设置所需的唯一configuration。 也许接口文件中有合成错误。 我排除了这一点,因为我已经比较了我的编程输出到有效的文件,事情看起来很好。 此外,我不认为syntatic错误会导致一个文件被消隐。 编辑:我的设备是基于TI Sitara uP运行Debian Wheezy 3.14变种。 我运行node.js v0.12.x作为服务器后端。

连接设备数量的miniupnpssdpd查询失败

我正在openWRT linux环境中工作,并试图在我的LANnetworking上启用UPnP,同时在任何给定点监视连接的设备。 为此,我已经在系统中启用了miniupnpd,以及minissdpd。 我已经写了下面的函数,用于调查minissdpd以试图了解哪些设备当前连接(基于minissdpd代码所有者的示例): static int query_connectedDevices(void) { struct sockaddr_un addr; int s, nRet = 0; const char * minissdpdsocketpath = "/var/run/minissdpd.sock"; unsigned char buffer[2048]; unsigned char * p; const char * device = "urn:schemas-upnp-org:device:InternetGatewayDevice:1"; int device_len = (int)strlen(device); /*Open communication socket with minissdpd process*/ s = socket(AF_UNIX, SOCK_STREAM, 0); if(s < 0) { return […]

tcpdump有多干扰?

我四处寻找tcpdump内部的文档,但是我还没有发现任何东西。 所以我的问题是,在计算机上tcpdump是如何侵入的。 如何评估专用于stream量分析的资源量(内存或CPU)?

当在导入包中定义struct时如何使用go receiver

目前与vishvananda/netns软件包一起尝试从特定的networking命名空间中提取路由。 有一个定义的Handle结构体,当我为特定的networking命名空间请求一个“句柄”时返回。 因此: func NewHandleAt(ns netns.NsHandle, nlFamilies …int) (*Handle, error) 然后这是一个接收器参数(?)到一个需要该句柄的函数, func (h *Handle) LinkList() ([]Link, error) 我是新来的,不知道如何把这些联系在一起。 我坚持: func (h *Handle) showInts() { int, err := h.netlink.LinkList() if err != nil { log.Fatal(err) } for i, r := range int { log.Printf("%d: %s", i, r.Attrs().Name) } } func main() { ints, err := netlink.LinkList() […]

对属于列表的2到3位数字进行算术运算

这是一个大学的练习,在客户端和服务器端build立一个客户端,服务器为客户端抛出随机的math问题来解决和呈现。 例如,服务器说: MATH 843 + 542 #which is a 13 element list 我的目标是创build一个代码来有效地计算所有操作的结果(+ – * /),并使其适用于2位和3位数字。 我发现这个服务器消息是一个列表,它是元素5,6,7和11,12,13需要处理。

如何在Linux中安全地删除blockdevice驱动程序

我正在写一个Linux的块设备驱动程序。 支持不安全的移除是至关重要的(如usb拔掉)。 换句话说,即使应用程序在我的设备上保存打开的文件或执行IO,或者使用文件系统挂载,我也希望能够closures块设备而不会造成内存泄漏/崩溃。 当然不安全的删除可能会破坏设备上存储的数据,但这是客户愿意接受的。 以下是我所做的基本步骤: 在不安全的移除之后,块设备会产生一个僵尸,它会自动失败所有新的IO请求,ioctls等等。僵尸替代了make_request函数并且改变了其他函数指针,所以内核不需要原始块设备。 块设备等待所有正在运行的IO(并使用我的内部资源)来完成 它del_gendisk(); 但是这并不是真的释放内核资源,因为它们仍然被使用。 块设备释放自己。 僵尸跟踪块设备上的打开()和closures()的数量,当最后一次close()发生时它会自动释放free()本身 结果 – 我没有泄漏块设备,请求队列,生成磁盘等。 然而,这是一个非常困难的机制,它需要大量的代码,并且非常容易出现竞争状况。 我仍然在与angular落案件,per_cpu计数的io和偶尔的崩溃挣扎 我的问题:内核中是否有这样的机制呢? 我search了手册,文献,以及块设备驱动程序,内存盘和USB驱动程序的无数源代码示例,但找不到解决scheme。 我相信,我不是第一个遇到这个问题的人。 编辑:我从下面的答案,由戴夫S了解热插拔机制,但它不帮助我。 我需要一个如何安全closures驱动程序的解决scheme,而不是如何通知内核该驱动程序已closures。 一个问题的例子: blk_queue_make_request()注册一个函数,我的块设备通过这个函数为IO服务。 在这个函数中,我增加了per_cpu计数器,以知道每个cpu有多lessIO正在运行。 但是有一个调用函数的竞态条件,但是计数器还没有增加,所以我的设备认为有0个IO,释放资源然后IO到来,崩溃了系统。 就我所知,热插拔不会帮助我解决这个问题