标签:代码 出错 show and 就是 模块 size 命令 char
已经正常安装了SDN环境(mininet和openswitch2.11.0和Ryu)
使用前面教程安装环境SDN实验---使用git安装Mininet
//custom function to log info void send_msg(const char* filename,const char* info); //file operation function struct file *file_open(const char *path, int flags, int rights); void file_close(struct file *file); int file_read(struct file *file, unsigned long long offset, unsigned char *data, unsigned int size); int file_write(struct file *file, unsigned long long offset, unsigned char *data, unsigned int size);
//custom function to log info void send_msg(const char* filename,const char* info) { loff_t f_pos; struct file* fp = file_open(filename,O_RDWR|O_CREAT,0666); f_pos = fp->f_pos; file_write(fp,f_pos,info,strlen(info)+1); file_close(fp); } //file operation function struct file *file_open(const char *path, int flags, int rights) { struct file *filp = NULL; mm_segment_t oldfs; int err = 0; oldfs = get_fs(); set_fs(get_ds()); filp = filp_open(path, flags, rights); set_fs(oldfs); if (IS_ERR(filp)) { err = PTR_ERR(filp); return NULL; } return filp; } void file_close(struct file *file) { filp_close(file, NULL); } int file_read(struct file *file, unsigned long long offset, unsigned char *data, unsigned int size) { mm_segment_t oldfs; int ret; oldfs = get_fs(); set_fs(get_ds()); ret = vfs_read(file, data, size, &offset); set_fs(oldfs); return ret; } int file_write(struct file *file, unsigned long long offset, unsigned char *data, unsigned int size) { mm_segment_t oldfs; int ret; oldfs = get_fs(); set_fs(get_ds()); ret = vfs_write(file, data, size, &offset); set_fs(oldfs); return ret; }
lsmod | grep openvswitch
第一行,第三列为1则被占用,为0未被占用(此处未被占用)
sudo ovs-dpctl show
查看内核,应该会有一个ovs-system
的datapath此时需要使用sudo ovs-dpctl del-dp ovs-system删除刚才看到的datapath。
rmmod openvswitch
来移除openvswitch内核模块,再使用lsmod|grep openvswitch
应该就没有openvswitch字样。
因为我们之前安装openswitch编译过一次,我们需要先清除上一次的文件。
没有错误的时候不用clean,这样编译会快很多,编译器会自动编译变动的部份。
当排除错误时就应当clean一下(当出现莫名其妙的错误时,就要想到可能是没有clean导致的)---出错可以参考上一篇文章openvswitch2.11.0修改源码后重新编译
./configure是源代码安装的第一步,主要的作用是对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系,但并不是所有的tar包都是源代码的包,可以ls看看有没有configure这个文件,如果是二进制的包,解压后直接就能使用
查看ko文件位置 modinfo openvswitch
备份原始ko文件,删除原始文件
lsmod | grep bridge 查看原始程序是否在运行(我们前面以及关闭了,这里应该没有输出信息)
lsmod | grep openvswitch
使用lsmod | grep open查看是否加载了内核
查看内核信息
modprobe -D openvswitch 进行内核模块插入
modinfo /lib/modules/4.15.0-20-generic/extra/openvswitch.ko
原本在二中,没有这个extra文件夹和这些内核模块。在make modules_install后出现
原始源文件中,被删除了openswitch.ko,编译后没有在这个文件中出现
sudo mkdir -p /usr/local/etc/openvswitch sudo ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema ls /usr/local/etc/openvswitch
*** Creating network *** Adding controller *** Adding hosts: h1 h2 *** Adding switches: ovs-vsctl: unix:/usr/local/var/run/openvswitch/db.sock: database connection failed (No such file or directory) ovs-vsctl exited with code 1 *** Error connecting to ovs-db with ovs-vsctl Make sure that Open vSwitch is installed, that ovsdb-server is running, and that "ovs-vsctl show" works correctly. You may wish to try "service openvswitch-switch start"
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach ovs-vsctl --no-wait init ovs-vswitchd --pidfile --detach --log-file
原本没有run目录,无法创建递归目录导致错误。我们使用sudo mkdir -p /usr/local/var/run/openvswitch/
解决问题
boot_ovs.sh就是,sudo chmod 777 ./boot_ovs.sh 启动即可
之前我给了2个cpu,一个2核。应该适当降低
sudo mn --test pingall
标签:代码 出错 show and 就是 模块 size 命令 char
原文地址:https://www.cnblogs.com/ssyfj/p/11901922.html