首先思考一个问题,LVS的运行环境?
我们知道,应用层是运行在用户态的,但是如果想修改数据包,只有内核态的程序才可以。
所以,问题就转移成如何写一个内核态的程序。
在这里,内核模块可以帮我们实现。
我们可以自己实现一个内核模块,让代码在内核态运行。
下面来看LVS的源码
在ip_vs_core.c这个文件中,首先看头文件
我们可以看到里面有 module.h这个头文件,这就是写内核模块需要用到的头文件。
然后我们看看如果实现内核模块。
在文件的最后几行,我们可以看到下图
首先第一行有init,我们可以得知这是模块初始化,在模块加载前要进行的初始化动作,
这里填入的是 ip_vs_init这个回调函数,表示此模块在加载前可以调用一个我们自