该段代码用于从TCP包中提取FTP控制消息,即获取FTP命令和响应。
具体分析如下:
通过dp_packet_l4()函数获取TCP报文头部指针th。
将TCP报文头部指针th转换为char类型的指针tcp_hdr。
使用tcp_payload_length()函数获取TCP报文有效载荷长度。
定义一个tcp_payload_of_interest变量作为感兴趣的FTP消息的最大长度,其值被限制在LARGEST_FTP_MSG_OF_INTEREST和tcp_payload_len之间,取两者中较小的那个。
使用TCP_OFFSET(th->tcp_ctl) * 4计算TCP报文头部长度,其中TCP_OFFSET宏用于获取TCP头部长度字段,乘以4是因为TCP头部长度单位是4字节。
使用ovs_strlcpy()函数将tcp_hdr + tcp_hdr_len处开始,长度为tcp_payload_of_interest的内容复制到ftp_msg缓冲区中。其中,ovs_strlcpy()函数类似于strncpy()函数,但会确保目标缓冲区以’\0’结尾,并返回实际复制的字符数。