Курсовая работа: Реализация сети в операционной системе Linux
...................................
}
функция ip_setsockopt лежит в net/ipv4/ip_sockglue.c в ней идет длинный перебор опций мы остановим свой выбор на уровне SOL_IP и добавим в перебор свои строки /*HACK:>>>>>>>>>>>>>>>*/
#ifdef CONFIG_HACKIP
case IP_HACKIP:
printk("HACKIP:setsockopt flag %d\n",sk->hackflag);
sk->hackflag=1;
get_user(val,(int *) optval);
printk("HACKIP:setsockopt val %d\n",val);
sk->hackf.src_addr=val;
break;
#endif
case IP_HDRINCL:
подробнее опишем происходящие действия
printk -выводим отлабочные сообщения
Я не уверен ,но судя по всему при создании сокета вся структура обнуляется поэтому мы можем не смотреть флаг .Я добавил эту строку ,чтоб посмотреть всегда ли он равен 0 при не установленной опции а после установки при повторе он равен 1. get_user забираем значение ,подробности include/asm/uaccess.h но для всего этого нам надо добавить соответствующие поля в struct sock =======sock.h=============
.........................
#ifdef CONFIG_HACKIP
/*HACK:>>>>>>>>>>>>>>>>>>*/
struct ip_hack {
__u32 src_addr;
};
#endif
struct sock {
/* Socket demultiplex comparisons on incoming packets. */
.................................
#ifdef CONFIG_HACKIP
/*HACK:>>>>>>>>>>>>>>>>>*/
struct ip_hack hackf;