Теми рефератів
> Реферати > Курсові роботи > Звіти з практики > Курсові проекти > Питання та відповіді > Ессе > Доклади > Учбові матеріали > Контрольні роботи > Методички > Лекції > Твори > Підручники > Статті Контакти
Реферати, твори, дипломи, практика » Курсовые проекты » Реалізація мережі в операційній системі Linux

Реферат Реалізація мережі в операційній системі Linux





овий буфер і звільнення старого Установка потрібних ip опцій фрагменторованіе якщо необхідно відправка пакету на потрібний девайс

DEVICE_rx () девайсно залежна функція,

приклад drivers/net/de600.c

тут я спробую перевести чудові коментарі автора

Linux driver for the D-Link DE-600 Ethernet pocket adapter. p> *

* Portions (C) Copyright 1993, 1994 by Bjorn Ekwall

* The Author may be reached as bj0rn@blox.se

/*

* Якщо у нас хороший пакет то забираємо його з адаптера

*/

static void

de600_rx_intr (struct net_device * Dev)

{

struct sk_buff * skb;

unsigned long flags;

int i;

int read_from;

int size;

register unsigned char * buffer;

save_flags (flags);

cli ();

/* Визначаємо розмір пакету */

size = de600_read_byte (RX_LEN, dev);/* Нижнього байт */

size + = (de600_read_byte (RX_LEN, dev) 1535)) {

printk ("% s: Bogus packet size % D.n ", dev-> name, size);

if (size> 10000)

adapter_init (dev);

return;

}

skb = dev_alloc_skb (size +2);

if (skb == NULL) {

printk ("% s: Couldn't allocate a sk_buff of size% d.n ",

dev-> name, size);

return;

}

/* Інакше */

skb-> dev = dev;

skb_reserve (skb, 2);/* Align */

/* 'Skb-> data' указивет на початок буфера даних. */p> buffer = skb_put (skb, size);

/* копіюємо пакет у буфер */

de600_setup_address (read_from, RW_ADDR);

for (i = size; i> 0; - i, + + Buffer)

* buffer = de600_read_byte (READ_DATA, dev);

/* Визначаємо тип протоколу

skb-> protocol = eth_type_trans (skb, dev);

/* Передаємо на верхній рівень см net/core/dev.c

netif_rx (skb);

/* оновлюємо статистику */

dev-> last_rx = jiffies;

((struct net_device_stats *) (Dev-> priv)) -> rx_packets + +;/* кількість отримань */

((struct net_device_stats *) (Dev-> priv)) -> rx_bytes + = size;/* кількість отриманих байт */

/*

* Якщо трапиться щось погане під час доставки, netif_rx ()

* зробило a mark_bh (INET_BH) для нас і буде працювати

* коли ми увійдемо в bottom-halv.

*/

}

ip_finish_output () net/ipv4/ip_output

визначає девайс для даного маршруту

викликає функцію девайса [= dev_queue_xmit]

ip_forward -net/ipv4/ip_forward

в цьому файлі хороші коментарі

перевіряємо роутер

якщо пакет нікому не призначений то Дропана

якщо поганий TTL аналогічно

якщо неможуть пакет отфорвардітся то відправляємо icmp пакет ICMP_DEST_UNREACH

якщо необхідно шолом пакет ICMP HOST REDIRECT

копіюємо і знищуємо старий пакет

зменшуємо TTL

якщо необхідно встановлюємо потрібні опції ip_forward_options в

ip_fo...


Назад | сторінка 10 з 13 | Наступна сторінка





Схожі реферати:

  • Реферат на тему: Просування бутіка розміру plus size на прикладі ТОВ &Атлант&, бутік &Elena ...
  • Реферат на тему: Якщо ви викликаєте швидку допомогу
  • Реферат на тему: Якщо лікарняний невірно розрахований
  • Реферат на тему: Якщо ваш працівник затриманий чи засуджений
  • Реферат на тему: Якщо ремонт виявився модернізацією