2012/7/16 Jing Huang <jing.huang....@gmail.com>: > This patch makes do_setsockopt() support SOL_RAW ICMP_FILTER socket option. > > Signed-off-by: Jing Huang <jing.huang....@gmail.com> > --- > linux-user/syscall.c | 20 ++++++++++++++++++++ > 1 files changed, 20 insertions(+), 0 deletions(-) > > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index 28c8ba5..fc8690d 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -60,6 +60,7 @@ int __clone2(int (*fn)(void *), void *child_stack_base, > #include <netinet/ip.h> > #include <netinet/tcp.h> > #include <linux/wireless.h> > +#include <linux/icmp.h> > #include "qemu-common.h" > #ifdef TARGET_GPROF > #include <sys/gmon.h> > @@ -1442,6 +1443,25 @@ static abi_long do_setsockopt(int sockfd, int level, > int optname, > goto unimplemented; > } > break; > + case SOL_RAW: > + switch (optname) { > + case ICMP_FILTER: > + /*struct icmp_filter takes an u32 value*/ > + optname = ICMP_FILTER; Needless assignment statements. optname already has the value ICMP_FILTER > + if (optlen < sizeof(uint32_t)) { > + return -TARGET_EINVAL; > + } > + > + if (get_user_u32(val, optval_addr)) { > + return -TARGET_EFAULT; > + } > + ret = get_errno(setsockopt(sockfd, level, optname, > + (char *)&val, sizeof(val))); Dont need casting &val to char *. > + break; > + default: > + goto unimplemented; > + } > + break; > case TARGET_SOL_SOCKET: > switch (optname) { > /* Options with 'int' argument. */ > -- > 1.7.8.6 > >
-- Best Regards, Dunrong Huang