LINUX.ORG.RU

Сообщения megabug

 

mGRE over Ethernet

Форум — Admin

Привет всем.

Хочется очень странного, а именно, mGRE over Ethernet.

Пробую сделать следующее на машина с IP 192.168.0.1 ip tunnel add mgre0 mode gre key 0xfffffffe ttl 255 dev eth0 ip addr add 10.0.0.1/24 dev mgre0 на 192.168.0.2 ip tunnel add mgre0 mode gre key 0xfffffffe ttl 255 dev eth0 ip addr add 10.0.0.2/24 dev mgre0

В данном варианте ничего не работает. Если сделать ip neigh add 10.0.0.2 lladdr 192.168.0.2 dev mgre0 на 192.168.0.1 и ip neigh add 10.0.0.1 lladdr 192.168.0.1 dev mgre0 на 192.168.0.2 соответственно, то все нормально.

Но можно ли обойтись без этого ведь машины находятся в одной сети с возможностью отправки широковещательных сообщений? Даже arping 10.0.0.2 выдает ARPING 10.0.0.2 from 192.168.0.1 eth0 Unicast reply from 10.0.0.2 [00:30:48:7B:3F:36] 0.590ms и в ip neig show попадает 10.0.0.2 dev eth0 lladdr 00:30:48:7b:3f:36 STALE где 00:30:48:7B:3F:36 соответствует интерфейсу с адресом 192.168.0.2

И может ли вообще GRE в качестве транспорта использовать что нибудь отличное от IP?

megabug
()

работа с device-mapper

Форум — Admin

Привет!

Пытаюсь сделать raid1 средствами device-mapper c помощью таргета raid (реализован в drivers/md/dm-raid.c). Создаю raid вот таким способом echo «0 39828 raid raid1 1 2048 2 - /dev/disk1 - /dev/disk2» | dmsetup create testraid На этом этапе все работает. Но есть ряд вопросов по дальнейшей работе: 1) Как пересобрать массив? 2) Как пометить диск сбойным и удалить его из массива? 3) Как добавить диск в массив?

Буду признателен за любую помощь.

megabug
()

[kernel] generic_make_request - не срабатывает callback

Форум — Development

Привет всем, если следующий код драйвера

void my_end_request(struct bio* child, int error)
{
  my_private_t*    private = child->bi_private;
  complete((struct completion*)private->completion);
}

int my_submit_request
(
    my_handle_t*   handle,
    int             rw,
    int             mode, 
    struct bio*     bio,
    void*           user_private_data,
    bio_end_io_t*   user_callback
)
{
  struct bio*       child     = NULL;
  my_private_t*    private   = NULL;
  my_registry_t*   registry  = NULL;
  int               direction = -1;
  DECLARE_COMPLETION_ONSTACK(completion);

  registry = handle->registry;

  direction = bio_data_dir(bio);

  child = bio_clone(bio, GFP_NOIO);

  private = my_private_get(registry->my_cache_private); // тут получаем структуру, в которой хранятся некоторые наши данные
 
  child->bi_end_io = (bio_end_io_t*)my_end_request; // устанавливаем callback

  child->bi_bdev = handle->bdev; // с этого устройства будем производить чтение
  
  private->completion = &completion;

  private->parent = bio;
  private->user_private_data = user_private_data;
  private->user_callback = user_callback;
  private->mode = mode;
  private->handle = handle;
  child->bi_private = private;
 
  generic_make_request(child);
  wait_for_completion(&completion); // Ждем конца чтения
  
  // еще какой то код
}

Пытаюсь перенаправлять запросы (пока только на чтение) со своего устройства на другое, в функции my_submit_request клонирую bio, вызываю сначала generic_make_request затем wait_for_completion(&completion) для того, что бы дождать окончания чтения, в коллбэке my_submit_request должна сработать функция complete. Проблема в том, никакого вызова коллбэка не происходит и мы вечно висим в wait_for_completion.

Код проверяющий ошибки не стал приводить что бы сократить объем.

 

megabug
()

RSS подписка на новые темы