提高JNI代码对网络驱动的访问权限

乐乐萍萍爸 2013-06-19 02:21:13
我正在开发一个JNI库,该JNI库需要做下面的函数“send_mod_request - send a linkinfo modification request”;我得到的错误返回结果是:RTNETLINK answers:1 , Operation not permitted

请问各位大侠,如何提高JNI代码对网络驱动的访问权限?


/**
* @ingroup intern
* @brief send_mod_request - send a linkinfo modification request
*
* @param fd decriptor to a priorly opened netlink socket
* @param n netlink message containing the request
*
* sends a request to setup the the linkinfo to netlink layer and awaits the
* status.
*
* @return 0 if success
* @return negativ if failed
*/
static int send_mod_request(int fd, struct nlmsghdr *n)
{
int status;
struct sockaddr_nl nladdr;
struct nlmsghdr *h;

struct iovec iov = {
.iov_base = (void *)n,
.iov_len = n->nlmsg_len
};
struct msghdr msg = {
.msg_name = &nladdr,
.msg_namelen = sizeof(nladdr),
.msg_iov = &iov,
.msg_iovlen = 1,
};
char buf[16384];

memset(&nladdr, 0, sizeof(nladdr));

nladdr.nl_family = AF_NETLINK;
nladdr.nl_pid = 0;
nladdr.nl_groups = 0;

n->nlmsg_seq = 0;
n->nlmsg_flags |= NLM_F_ACK;

status = sendmsg(fd, &msg, 0);

if (status < 0) {
perror("Cannot talk to rtnetlink");
return -1;
}

iov.iov_base = buf;
while (1) {
iov.iov_len = sizeof(buf);
status = recvmsg(fd, &msg, 0);
for (h = (struct nlmsghdr *)buf; (size_t) status >= sizeof(*h);) {
int len = h->nlmsg_len;
int l = len - sizeof(*h);
if (l < 0 || len > status) {
if (msg.msg_flags & MSG_TRUNC) {
fprintf(stderr, "Truncated message\n");
return -1;
}
fprintf(stderr,
"!!!malformed message: len=%d\n", len);
return -1;
}

if (h->nlmsg_type == NLMSG_ERROR) {
struct nlmsgerr *err =
(struct nlmsgerr *)NLMSG_DATA(h);
if ((size_t) l < sizeof(struct nlmsgerr)) {
fprintf(stderr, "ERROR truncated\n");
} else {
errno = -err->error;
if (errno == 0)
return 0;

perror("RTNETLINK answers");
fprintf(stderr, "RTNETLINK answers:%x , %s\n", errno, strerror(errno));
}
return -1;
}
status -= NLMSG_ALIGN(len);
h = (struct nlmsghdr *)((char *)h + NLMSG_ALIGN(len));
}
}

return 0;
}
...全文
202 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
习_霜 2014-12-07
  • 打赏
  • 举报
回复
楼主,急求,请问这个问题你怎么解决的?我调试can也遇到这个问题了RTNETLINK answers:1 , Operation not permitted,不知道怎么处理。我明天要去客户那里啊。。。悲剧。。。
乐乐萍萍爸 2013-07-09
  • 打赏
  • 举报
回复
我顶,我顶, 我顶, 我顶, 我顶
乐乐萍萍爸 2013-06-23
  • 打赏
  • 举报
回复
我顶,我顶, 我顶, 我顶, 我顶
凉凉二点凉 2013-06-19
  • 打赏
  • 举报
回复
引用 2 楼 suck666 的回复:
[quote=引用 1 楼 guoyoulei520 的回复:] 权限这块确实很头疼,不是很明白,之前遇到类似的都是放到init.rc里面去做的.
在init.rc里面修改某个驱动dev设备的权限,我知道;但是现在是网络模块,套接字通信,如何修改权限?[/quote] 你没明白我的意思,我的意思是把你的bin放在init.rc里面
乐乐萍萍爸 2013-06-19
  • 打赏
  • 举报
回复
引用 1 楼 guoyoulei520 的回复:
权限这块确实很头疼,不是很明白,之前遇到类似的都是放到init.rc里面去做的.
在init.rc里面修改某个驱动dev设备的权限,我知道;但是现在是网络模块,套接字通信,如何修改权限?
凉凉二点凉 2013-06-19
  • 打赏
  • 举报
回复
权限这块确实很头疼,不是很明白,之前遇到类似的都是放到init.rc里面去做的.

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧