LINUX.ORG.RU

Сообщения cruz7

 

gnus/IMAP вытягивает все письма, включая уже прочитанные

Форум — Desktop

Имеется Emacs-46.1 с настроенным Gnus'ом, который вытягивает с gmail письма по IMAP. В целом все работает, прочитанные письма не отображаются в группе INBOX, но иногда наблюдаю следующее: gnus вытягивает _все_ письма (а это тысячи), в том числе и прочитанные, и INBOX раздувается.

Тоже самое иногда происходит если проверять письма вручную, наживая «/ N».

Я что-то делаю не так, или это известный баг. Что делать?

 , ,

cruz7
()

соединить две VM на одной машине через бридж

Форум — General

Настраиваю light-weigh виртуальную машину lkvm (http://git//git.kernel.org/pub/scm/linux/kernel/git/will/kvmtool.git) для общения между собой. VM при запуске создает tun интерфейсы на хостеь (аналогично тому как делают другие VM).


               VM1                          VM2
          +----------+                 +-----------+
          |          |                 |           |
tap0 -----+eth0  eth1+--tap1-----tap2--+eth0   eth1+--tap3-
          |          |                 |           |
          +----------+                 +-----------+

1) на обоих VM включена маршрутизация, на всякий случай отключен rp_filter

2) на обоих VM установлены соответствующие маршруты

3) на всех VM прописаны IP адреса на интерфейсах

4) создаем и поднимаем bridge девайс на хосте, интерфейсы tap1 and tap2 добавлены в bridge, на tap1/tap2/bridge IP адреса не прописаны (не уверен нужно ли??)

5) включена маршрутизация на хосте

6) адреса следующие:

   VM1 eth0 20.20.20.2/24
       eth1 30.30.30.2/24
   VM2 eth0 30.30.30.3/24
       eth1 40.40.40.2/24

Но по каким-то причинам не работает, пинг не ходит с VM1 eth1->tap1->br->tap2->eth0 (хотя вижу пакеты на tap1 and bridge девайсе, но не на tap2.) или наоборот с VM2.

Что я делаю не так?

 , , ,

cruz7
()

компиляция linux для PowerPC архитектуры

Форум — Development

Нужно скомпилить линукс под Ubuntu 16.04.4 LTS для PowerPC big-endian архитектуры. Понятно, что нужен соответствующий тулчейн. 'apt-cache search' выдал кое-что. Вопрос — стоит ли пользоваться тем, что есть в портах, или лучше взять тулчейн от DENX например, http://www.denx.de/wiki/ELDK-5/WebHome ?

Интересует мнения и комментарии.

Спасибо!

 , , ,

cruz7
()

достать neighbour entry из struct rt

Форум — Development

Приветствую,

Имеется простая топология:

       |--------------------------------------------------|
-------+ enp0s1 192.168.2.0/24      192.168.3.0/24 enp0s2 +-----
       |--------------------------------------------------|

% ip neigh  add 192.168.3.111 lladdr 00:11:22:33:44:55 dev enp0s2 nud permanent
% ip neigh sh
...
192.168.3.111 dev enp0s2 lladdr 00:11:22:33:44:55 PERMANENT
% ip route show
...
192.168.3.0/24 dev enp0s2 proto kernel scope link src 192.168.3.2

В моем ядерном модуле мне нужно получить neighbour entry для 192.168.3.111 :

struct rtable *rt;
struct flowi4 fl4;
struct dst_entry dst;
struct neighbour *neigh;
u8 mac[ETH_ALEN];

...
memset(&fl4, 0, sizeof fl4);
fl4.daddr = daddr;
fl4.flowi4_proto = IPPROTO_UDP;

rt = ip_route_output_key(net, &fl4);
if (IS_ERR(rt))
    goto err;

...
dst = rt->dst;
neigh = dst_neigh_lookup(&dst, &fl4.daddr);
if (!neigh) {
   ...
}

neigh_ha_snapshot(mac, neigh, neigh->dev);
neigh_release(neigh);
ip_rt_put(rt);

Однако, neigh_ha_snapshot не возвращает корректный MAC адрес, иногда я получаю ff:ff:ff:ff:ff:ff, иногда multicast 01:xx:xx:xx:xx:xx.

Что я делаю не так?

 , , , ,

cruz7
()

bitwise операции над signed char

Форум — Development
    char *ptr;
    u32 mask, shift, val;
    ...
    val = (*ptr & mask) >> shift;

Поскольку char может быть как со знаком так и без, какие сторонние «эффекты» могут быть при выполнении AND,OR или XOR когда один из операндов signed?

Я знаю что >> или << дают undefined behaviour в таких случаях, но не уверен насчет AND/OR.

 ,

cruz7
()

eBPF: перехватывать выполнение функций

Форум — Development

Читаю про bpf kprobes, вроде как этот механизм позволяет перехватывать системные вызовы, ну и наверное любые другие функции. А вот можно ли с помощью kprobe полностью подменить функцию и, например, сразу возвращать ошибку?

Может быть я не туда смотрю и kprobe не позволяет это делать? Тогда какие есть другие варианты (мне хотелось бы сделать это средствами ebpf)?

 , ,

cruz7
()

заново отправить патч в Linux netdev

Форум — Development

Вопрос по правилам сабмита патчей в net подсистему ядра. Там имеется две ветки, net-next.git и net.git, последняя обычно для баг фиксов, а первая вроде как для новых фитч.

Если ошибочно отправил баг-фикс в net-next, то должен ли я отправлять новую версию патча, то есть [PATCH v2 net] ... или это должно выглядеть как [RESEND PATCH net.git ... ] ?

Я пытался найти объяснения в Documentation/process/submitting-patches.rst но там ничего про эту ситуацию не сказано.

 , , ,

cruz7
()

движение пакета между неймспейсами

Форум — Development

Приветствую,

Меня интересует, сохраняется ли какая-то namespace spcific мета-информация в skb при перемещении пакета из одного неймспейса в другой? Подозреваю, что ядро это подчищает, но вот где конкретно в ядре это посмотреть?

 , , , ,

cruz7
()

стартовать wmii из ~/.xinitrc

Форум — Desktop

Подскажите как правильно запускать wmii из ~/.xinitrc? Если просто запускать как «exec wmii», то похоже что конфиг-скрипт /etc/X11/wmii/wmiirc при этом не применяется. При этом «exec wmii -r ...» не помогает.

По умолчанию, то есть xinitrc не трогаем, wmii запускается успешно, в процессах видно «/bin/dash -f /etc/X11/wmii/wmiirc».

Как же правильно-то запустить?

 , , ,

cruz7
()

network namespaces: выделение и хранение ID

Форум — Development

Читаю код в net/core/net_namespace.c который отвечает за присвоение netns уникального ID:

   rtnl_net_newid()
      -> nsid = nla_get_s32(tb[NETNSA_NSID]);
      -> alloc_netid(net, peer, nsid);
           -> idr_alloc(&net->netns_ids, peer, ...);
      -> rtnl_net_notifyid(net, RTM_NEWNSID, err);

То есть этот код выполняется в ответ на:

$ ip netns add ns1
$ ip netns set ns1 789

Однако я не нашел в коде, где именно хранится аллоцированный ID, то есть нигде в 'struct net' nsid не сохраняют явным образом. В таком случае, где его хранят?

 , ,

cruz7
()

pernet_operations — что есть для других неймспейсов?

Форум — Development

Для network namespace'ов имеется структура 'struct pernet_operations', таким образом другие модули могут получать события при создании/удалении сетевых контейнеров. Есть ли аналогичные структуры для PID/Mount и пр. неймспейсов?

Спасибо.

 , ,

cruz7
()

посылать события при создании/удалении namespace'а

Форум — Development

Приветствую,

Вот имеется системные вызовы unshare(2) и clone(2), с их помощью можно создать неймспейс(ы). А есть ли какой-то механизм событий создания неймспейсов, то есть чтобы ядро посылало event (как например делается при создании интерфейса или IP маршрута, iproute2/ip может такие события мониторить).

Беглый просмотр ядреного кода unshare() ничего такого не выявил. Погуглил, но там в основном все методы - это сканирование /proc и /var/run/netns.

 , ,

cruz7
()

отлавливать события файловой системы

Форум — Development

Приветствую, какие механизмы (API) предоставляет linux для мониторинга событий на файловых системах? Меня интересует, как можно отлавливать создание soft-links или монтирование к ФС ?

 , , ,

cruz7
()

bind mount директории на саму себя

Форум — Development

Читал маны про bind-mounting и кое-что в https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt но не пока не понял, зачем биндить директорию в саму себя:

mount --bind /dir1 /dir1

Наверное вместо dir1 может быть и путь до файла.

 , , ,

cruz7
()

общий вопрос по контейнерам a.k.a нэеймспейсы

Форум — Development

Приветствую,

Помещаю приложение, например демон, в контейнер следующим образом:

% unshare -mnupi ./my_daemon

То есть изолирую почти все неймспейсы. Все запускается и работает, могу зайти в контейнер вот так:

% nsenter --mount=/proc/PID/ns/mnt --net=/proc/PID/ns/net --pid=/proc/PID/ns/pid /bin/bash

где PID это pid моего запущенного процесса. Вот здесь вопрос — данный процесс по-прежнему виден в списке процессов на хосте, то есть там где init_ns. Так и должно быть, насколько я понимаю?

 , , , ,

cruz7
()

unshared mount namespace

Форум — Development

Приветствую,

% sudo unshare --mount=/tmp/mnt1 /bin/bash
unshare: mount /proc/1178/ns/mnt on /tmp/mnt1 failed: Not a directory 

То есть как я понимаю, после успешного выполнения команды я буду в новом mount namespace'е с запущенным bash, и все примонтированные файловые системы будут изолированы от хоста.

Директория /tmp/mnt1 присутствует.

Возвращаемая ошибка -ENOTDIR, man говорит следующее:

ENOTDIR
              target, or a prefix of source, is not a directory.

Полез смотреть код в util-linux-2.31/sys-utils/unshare.c :

static int bind_ns_files(pid_t pid)
{
   struct namespace_file *ns;
   char src[PATH_MAX];

   for (ns = namespace_files; ns->name; ns++) {
      if (!ns->target)
         continue;

      snprintf(src, sizeof(src), "/proc/%u/%s", (unsigned) pid, ns->name);

      if (mount(src, ns->target, NULL, MS_BIND, NULL) != 0)
         err(EXIT_FAILURE, _("mount %s on %s failed"), src, ns->target);  /* здесь происходит ошибка */
   }

   return 0;
}

static void bind_ns_files_from_child(pid_t *child, int fds[2])
{
   char ch;
   pid_t ppid = getpid();
   ino_t ino = get_mnt_ino(ppid);
   
   if (pipe(fds) < 0)
      err(EXIT_FAILURE, _("pipe failed"));
      
   *child = fork();
   
   switch (*child) {
   case -1:
      err(EXIT_FAILURE, _("fork failed"));
      
   case 0:  /* child */
      close(fds[1]);
      fds[1] = -1;
      
      /* wait for parent */
      if (read_all(fds[0], &ch, 1) != 1 && ch != PIPE_SYNC_BYTE)
         err(EXIT_FAILURE, _("failed to read pipe"));
      if (get_mnt_ino(ppid) == ino)
         exit(EXIT_FAILURE);
      bind_ns_files(ppid);
      exit(EXIT_SUCCESS);
      break;

   default: /* parent */
      close(fds[0]);
      fds[0] = -1;
      break;
}

...

if (npersists && (unshare_flags & CLONE_NEWNS))
   bind_ns_files_from_child(&pid, fds);

if (-1 == unshare(unshare_flags))
   err(EXIT_FAILURE, _("unshare failed"));

Что я делаю не так?

 , ,

cruz7
()

размаунтить /sys/fs/unified

Форум — Admin

Насколько я понимаю /sys/fs/unified монтируется systemd, как можно объяснить systemd не маунтить unified, или как принудительно размаунтить?

 , ,

cruz7
()

отсуствует debugfs в network namespace

Форум — Development

Приветствую,

Создаю namespace:

% uname -r
4.15.0-rc8+
% ip netns add ns1
% ip netns exec ns1 mount

Я предполагал что в списке доступных в контейнер ФС будут те же, что и на хосте, однако отсутсвует debugfs (а она мне как раз нужна). В чем причина, так задумано? Если да, то почему? Погуглил, но ничего путного не нашлось.

 , , ,

cruz7
()

sk_buff - линейный буффер и skb_shared_info

Форум — Development

Насколько я понимаю, sk_buff поддерживает возможность помещать данные линейно, а также странично, то есть нелинейно. «Страничность» определяется структурой skb_shared_info, которая помещается сразу после skb. Вопрос — гарантирует ли ядро минимальное количество байт, которые могут быть размещены в линейной области?

 , , ,

cruz7
()

ebpf — не удается приаттачить код

Форум — Development

Скомпилировал примеры из ядра в tools/testing/selftests/bpf и попробовал загрузить:

% tc filter add dev enp0s1 ingress bpf object-file ./net-next.git/tools/testing/selftests/bpf/sockmap_parse_prog.o section sk_skb1 verbose 
Program section 'sk_skb1' not found in ELF file!
Error fetching program/map!

llvm и clang версии 3.8, iproute2 последний из git.

Что я делаюне так?

 , , ,

cruz7
()

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