15AH, San Francisco

California, United States.

Send Your Mail At:

tianyingkejishe@sina.cn

Working Hours

Mon-Sat: 9.30am To 7.00pm

归档标题

Autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et dolore feugait.

月度归档 12月 28, 2022

【Linux】安装SCTP协议支持

一、报错现象


sctp程序运行:
int i = socket(AF_INET,SOCK_STREAM,IPPROTO_SCTP);
printf("huilh:%d,%d\r\n",i,errno);
输出:
huilh:-1,93

checksctp:
sctp: Protocol not supported

二、解决方法

1、外围的模块加载到内核中

#yum list kernel-modules-extra*

kernel-modules-extra.x86_64             4.18.0-240.15.1.el8_3             BaseOS

#yum install kernel-modules-extra.x86_64

2、安装SCTP

yum install lksctp*

3、查看安装是否成功

# modinfo sctp

filename:       /lib/modules/4.18.0-240.15.1.el8_3.x86_64/kernel/net/sctp/sctp.ko.xz
license:        GPL
description:    Support for the SCTP protocol (RFC2960)
author:         Linux Kernel SCTP developers <linux-sctp@vger.kernel.org>
alias:          net-pf-10-proto-132
alias:          net-pf-2-proto-132
rhelversion:    8.3
srcversion:     1F7FF36BEF4076DB3D4AF26
depends:        libcrc32c
intree:         Y
name:           sctp
vermagic:       4.18.0-240.15.1.el8_3.x86_64 SMP mod_unload modversions
sig_id:         PKCS#7
signer:         CentOS kernel signing key
sig_key:        43:C1:A4:E8:DF:2E:B3:D4:43:C1:4B:38:46:94:93:EB:C4:27:08:0D
sig_hashalgo:   sha256
signature:      1F:34:2A:3F:35:55:A9:24:B2:64:31:D6:AA:8F:E0:10:0C:76:B8:BF:
        CB:47:B0:59:39:22:B4:E8:3B:9A:F9:B5:82:D9:22:53:4E:A7:27:4C:
        D7:F3:C9:65:B6:77:1A:5A:25:18:C8:9B:D7:27:CB:A3:D4:95:ED:E5:
        3E:87:4E:E3:4F:A0:5B:DA:31:18:34:89:88:D9:CC:F5:90:76:D6:4A:
        0D:BA:1B:09:E2:10:80:7B:77:7B:15:97:7E:F9:45:92:39:7D:7C:A9:
        5D:4E:D5:8C:61:E0:F0:8D:CB:97:A7:E6:0C:84:64:6B:26:C7:69:02:
        54:EA:EB:04:C9:02:39:F8:7E:C7:08:C2:7E:83:4A:69:4F:B2:8C:83:
        C9:51:9B:5D:C7:C4:DB:5A:C4:14:DA:52:64:A2:FF:C5:E2:FE:DA:ED:
        B9:44:4B:C7:A8:D9:F4:78:A6:35:E9:E8:1C:14:E6:1B:1B:AD:72:4B:
        22:4E:05:6D:E6:DE:0A:D8:98:2C:AD:6E:25:84:1F:38:C1:D7:2B:5C:
        79:E6:CC:DF:16:D2:54:17:CD:87:B5:56:00:20:9D:09:F4:01:75:85:
        83:CA:C6:75:7E:3A:15:95:04:98:F1:D4:A1:47:CD:B1:8A:6A:3A:51:
        1F:07:1C:47:02:6A:17:CC:27:F5:DD:58:15:18:77:5B:BC:76:60:3C:
        D5:97:2C:EF:0E:32:E4:A3:93:EE:E7:F8:93:09:CB:1D:DB:84:D3:B5:
        56:C9:50:5C:42:95:7E:64:DF:CD:CE:4E:7E:AF:DE:C8:E9:29:51:62:
        46:C1:6F:BF:85:1E:EB:36:65:40:74:EF:64:47:6A:AB:11:B0:B7:24:
        4E:4F:3A:60:83:C7:5B:42:6A:A3:DC:0B:89:6C:CB:7D:EC:00:6A:8C:
        48:DE:17:B4:85:41:A1:F7:68:74:1C:FA:D2:10:89:20:A7:75:34:05:
        E7:A8:BB:AD:BA:33:2F:04:92:A1:33:1B:68:9A:D7:20:25:BA:7A:61:
        A8:DE:D2:85
parm:           no_checksums:Disable checksums computing and verification (bool)

从上述结果可以看出,可以查到模块,然后使用lsmod | grep sctp查看是否能查到模块,如果不能查到,则使用modprobe sctp 安装

4、手动加载SCTP

# modprobe sctp

安装完毕后,再用lsmod 查看是否已安装sctp模块。所示结果如下。

#lsmod | grep sctp

sctp                  405504  18
libcrc32c              16384  4 nf_conntrack,nf_nat,xfs,sctp

表明lsctp模块已在当前linux下安装完成。或者使用cat 命令。

# cat /proc/modules | grep sctp

sctp 405504 18 - Live 0xffffffffc0d71000
libcrc32c 16384 4 sctp,nf_nat,nf_conntrack,xfs, Live 0xffffffffc00dc000

5、自动加载

如果sctp不能自动加载到内核,请使用下面处理方式。

在/etc/sysconfig/modules的目录下新建sctp.modules文件

#! /bin/sh

/sbin/modinfo -F filename sctp > /dev/null 2>&1
if [ $? -eq 0 ]; then
    /sbin/modprobe sctp
fi

保存后,修改权限chmod+777 sctp.modules,重启便可看到已自动加载。