- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望能够添加新的 IPv6 地址,但到目前为止还无法做到。程序运行成功,但路由表中没有任何反射(reflect)。
#include <sys/socket.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <net/if.h>
#include <sys/types.h>
#define BUFSIZE 4095
struct route_info
{
char* dst_addr;
char* src_addr;
char* gateway;
char ifName[IF_NAMESIZE];
};
void fillRoutes(struct route_info* rinfo, const char* dst_addr, const char* src_addr, const char* gateway, const char* ifname)
{
int pton_fd;
pton_fd = inet_pton(AF_INET6, "2001::4", (struct in_addr *)&rinfo->dst_addr);
if (pton_fd <= 0)
{
perror("pton errror at dst_addr");
exit(EXIT_FAILURE);
}
pton_fd = inet_pton(AF_INET6, "2001::3", (struct in_addr *)&rinfo->gateway);
if (pton_fd <= 0)
{
perror("gateway error");
exit(EXIT_FAILURE);
}
}
int addAttr(struct nlmsghdr *nl, int maxlen, int type, void *data, int attr_len )
{
struct rtattr *rta;
int len = RTA_LENGTH(attr_len);
if(NLMSG_ALIGN(nl->nlmsg_len) + len > maxlen)
{
perror("inside attr()");
exit(EXIT_FAILURE);
}
nl->nlmsg_len = NLMSG_ALIGN(nl->nlmsg_len) + len;
rta = (struct rtattr *)((char *)nl + NLMSG_ALIGN(nl->nlmsg_len));
rta->rta_type = type;
rta->rta_len = len;
memcpy(RTA_DATA(rta), data, attr_len);
//nl->nlmsg_len = NLMSG_ALIGN(nl->nlmsg_len) + len;
fprintf(stderr, "attr len=%d\n",nl->nlmsg_len);
return 0;
}
int main (int argc, char **argv)
{
int bytes_sent;
int msg_seq =1;
int rtnetlink_socket = -1;
struct sockaddr_nl addr;
struct rtmsg *raddr;
struct nlmsghdr *nl;
struct iovec iov;
struct msghdr msg;
char dst_addr[30];
char src_addr[30];
char gateway[30];
char ifname[30];
char msgbuf[BUFSIZE];
struct route_info rinfo;
memset(&addr, 0, sizeof(addr));
memset(msgbuf, 0, BUFSIZE);
if ((rtnetlink_socket = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE)) < 0)
{
perror("socket");
exit(EXIT_FAILURE);
}
nl = (struct nlmsghdr *)msgbuf;
raddr = (struct rtmsg*)NLMSG_DATA(nl);
nl->nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg));
nl->nlmsg_type = RTM_NEWROUTE;
nl->nlmsg_flags = NLM_F_REQUEST | NLM_F_CREATE;
nl->nlmsg_seq = msg_seq++;
nl->nlmsg_pid = getpid();
//fill entries for routing table
raddr->rtm_family = AF_INET6;
raddr->rtm_dst_len = 128;
raddr->rtm_src_len = 0;
raddr->rtm_table = RT_TABLE_MAIN;
raddr->rtm_protocol = RTPROT_STATIC;
raddr->rtm_scope = RT_SCOPE_UNIVERSE;
raddr->rtm_type = RTN_UNICAST;
raddr->rtm_flags = RTM_F_NOTIFY;
raddr->rtm_tos = 0;
fillRoutes(&rinfo, dst_addr, src_addr, gateway, ifname);
addAttr(nl, BUFSIZE, RTA_DST, &rinfo.dst_addr, 16);
addAttr(nl, BUFSIZE, RTA_GATEWAY, &rinfo.gateway, 16);
if((bytes_sent = send(rtnetlink_socket, nl, nl->nlmsg_len, 0)) < 0)
{
perror("failed to write to socket");
exit(EXIT_FAILURE);
}
printf("No of bytes sent :%d\n", bytes_sent);
return 0;
}
当 RTA_DST 时,这给我的属性值为 48,当 RTA_GATEWAY 时,属性值为 68。我哪里做错了。我好像没发现bug如有任何帮助,我们将不胜感激!
最佳答案
您通过在 nlmsghdr 中设置错误的 PID 来向您自己的进程发送 NEWROUTE 请求。
nl->nlmsg_pid = getpid(); /* This is your own process ID*/
您需要send it to kernel ,PID为0,因此将其替换为
nl->nlmsg_pid = 0;
将其发送到内核,然后内核才能将其合并到路由表中。
另一点,对于通过 netlink 套接字发送数据/控制信息,sendmsg()
是首选方法。我不确定 send()
在这里如何工作,因为它旨在在连接状态下工作。请参阅man pages 。据说 send()
仅针对本地错误返回 -1
,不会检测远程错误,这可能是以后的另一个问题。
关于c - Netlink 套接字不会将路由添加到 IPv6 的路由表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23377935/
我创建了一个用户可以添加测试的字段。这一切运行顺利我只希望当用户点击(添加另一个测试)然后上一个(添加另一个测试)删除并且这个显示在新字段中。 所有运行良好的唯一问题是点击(添加另一个字段)之前添加另
String[] option = {"Adlawan", "Angeles", "Arreza", "Benenoso", "Bermas", "Brebant
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在努力将 jQuery 滚动功能添加到 nav-tab (Bootstrap 3)。我希望用户能够选择他们想要的选项卡,并在选项卡内容中有一个可以平滑滚动到 anchor 的链接。这是我的代码,可
我正在尝试在用户登录后再添加 2 个 ui 选项卡。首先,我尝试做一个之后。 $('#slideshow').tabs('remove', '4'); $("#slideshow ul li:last
我有一个包含选择元素的表单,我想通过选择添加和删除其中一些元素。这是html代码(这里也有jsfiddle http://jsfiddle.net/txhajy2w/):
正在写这个: view.backgroundColor = UIColor.white.withAlphaComponent(0.9) 等同于: view.backgroundColor = UICo
好的,如果其中有任何信息,我想将这些列添加到一起。所以说我有 账户 1 2 3 . 有 4 个帐户空间,但只有 3 个帐户。我如何创建 java 脚本来添加它。 最佳答案 Live Example H
我想知道是否有一种有效的预制算法来确定一组数字的和/差是否可以等于不同的数字。示例: 5、8、10、2,使用 + 或 - 等于 9。5 - 8 = -3 + 10 = 7 + 2 = 9 如果有一个预
我似乎有一个卡住的 git repo。它卡在所有基本的添加、提交命令上,git push 返回所有内容为最新的。 从其他帖子我已经完成了 git gc 和 git fsck/ 我认为基本的调试步骤是
我的 Oracle SQL 查询如下- Q1- select hca.account_number, hca.attribute3, SUM(rcl.extended_amou
我正在阅读 http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingG
我正在尝试添加一个“加载更多”按钮并限制下面的结果,这样投资组合页面中就不会同时加载 1000 个内容,如下所示:http://typesetdesign.com/portfolio/ 我对 PHP
我遇到这个问题,我添加了 8 个文本框,它工作正常,但是当我添加更多文本框(如 16 个文本框)时,它不会添加最后一个文本框。有人遇到过这个问题吗?提前致谢。 Live Link: JAVASCRIP
add/remove clone first row default not delete 添加/删除克隆第一行默认不删除&并获取正确的SrNo(例如:添加3行并在看到问题后删除SrNo.2)
我编码this ,但删除按钮不起作用。我在控制台中没有任何错误.. var counter = 0; var dataList = document.getElementById('materi
我有一个类似数组的对象: [1:数组[10]、2:数组[2]、3:数组[2]、4:数组[2]、5:数组[3]、6:数组[1]] 我正在尝试删除前两个元素,执行一些操作,然后将它们再次插入到同一位置。
使用的 Delphi 版本:2007 你好, 我有一个 Tecord 数组 TInfo = Record Name : String; Price : Integer; end; var Info
我使用了基本的 gridster 代码,然后我声明了通过按钮添加和删除小部件的函数它工作正常但是当我将调整大小功能添加到上面的代码中时,它都不起作用(我的意思是调整大小,添加和删除小部件) 我的js代
title 323 323 323 title 323 323 323 title 323 323 323 JS $(document).keydown(function(e){
我是一名优秀的程序员,十分优秀!