Имеется Emacs-46.1 с настроенным Gnus'ом, который вытягивает с gmail письма по IMAP. В целом все работает, прочитанные письма не отображаются в группе INBOX, но иногда наблюдаю следующее: gnus вытягивает _все_ письма (а это тысячи), в том числе и прочитанные, и INBOX раздувается.
Тоже самое иногда происходит если проверять письма вручную, наживая «/ N».
Я что-то делаю не так, или это известный баг. Что делать?
1) на обоих VM включена маршрутизация, на всякий случай отключен rp_filter
2) на обоих VM установлены соответствующие маршруты
3) на всех VM прописаны IP адреса на интерфейсах
4) создаем и поднимаем bridge девайс на хосте, интерфейсы tap1
and tap2 добавлены в bridge, на tap1/tap2/bridge IP адреса не прописаны (не уверен нужно ли??)
Но по каким-то причинам не работает, пинг не ходит с VM1 eth1->tap1->br->tap2->eth0 (хотя вижу пакеты на tap1 and bridge девайсе, но не на tap2.) или наоборот с VM2.
Нужно скомпилить линукс под Ubuntu 16.04.4 LTS для PowerPC big-endian архитектуры. Понятно, что нужен соответствующий тулчейн. 'apt-cache search' выдал кое-что. Вопрос — стоит ли пользоваться тем, что есть в портах, или лучше взять тулчейн от DENX например, http://www.denx.de/wiki/ELDK-5/WebHome ?
|--------------------------------------------------|
-------+ 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 :
Читаю про bpf kprobes, вроде как этот механизм позволяет перехватывать системные вызовы, ну и наверное любые другие функции. А вот можно ли с помощью kprobe полностью подменить функцию и, например, сразу возвращать ошибку?
Может быть я не туда смотрю и kprobe не позволяет это делать? Тогда какие есть другие варианты (мне хотелось бы сделать это средствами ebpf)?
Вопрос по правилам сабмита патчей в net подсистему ядра. Там имеется две ветки, net-next.git и net.git, последняя обычно для баг фиксов, а первая вроде как для новых фитч.
Если ошибочно отправил баг-фикс в net-next, то должен ли я отправлять новую версию патча, то есть [PATCH v2 net] ... или это должно выглядеть как [RESEND PATCH net.git ... ] ?
Я пытался найти объяснения в Documentation/process/submitting-patches.rst но там ничего про эту ситуацию не сказано.
Меня интересует, сохраняется ли какая-то namespace spcific мета-информация в skb при перемещении пакета из одного неймспейса в другой? Подозреваю, что ядро это подчищает, но вот где конкретно в ядре это посмотреть?
Подскажите как правильно запускать wmii из ~/.xinitrc? Если просто запускать как «exec wmii», то похоже что конфиг-скрипт /etc/X11/wmii/wmiirc при этом не применяется. При этом «exec wmii -r ...» не помогает.
По умолчанию, то есть xinitrc не трогаем, wmii запускается успешно, в процессах видно «/bin/dash -f /etc/X11/wmii/wmiirc».
Однако я не нашел в коде, где именно хранится аллоцированный ID, то есть нигде в 'struct net' nsid не сохраняют явным образом. В таком случае, где его хранят?
Для network namespace'ов имеется структура 'struct pernet_operations', таким образом другие модули могут получать события при создании/удалении сетевых контейнеров. Есть ли аналогичные структуры для PID/Mount и пр. неймспейсов?
Вот имеется системные вызовы unshare(2) и clone(2), с их помощью можно создать неймспейс(ы). А есть ли какой-то механизм событий создания неймспейсов, то есть чтобы ядро посылало event (как например делается при создании интерфейса или IP маршрута, iproute2/ip может такие события мониторить).
Беглый просмотр ядреного кода unshare() ничего такого не выявил. Погуглил, но там в основном все методы - это сканирование /proc и /var/run/netns.
Приветствую, какие механизмы (API) предоставляет linux для мониторинга событий на файловых системах? Меня интересует, как можно отлавливать создание soft-links или монтирование к ФС ?
где PID это pid моего запущенного процесса. Вот здесь вопрос — данный процесс по-прежнему виден в списке процессов на хосте, то есть там где init_ns. Так и должно быть, насколько я понимаю?
% 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"));
% uname -r
4.15.0-rc8+
% ip netns add ns1
% ip netns exec ns1 mount
Я предполагал что в списке доступных в контейнер ФС будут те же, что и на хосте, однако отсутсвует debugfs (а она мне как раз нужна). В чем причина, так задумано? Если да, то почему? Погуглил, но ничего путного не нашлось.
Насколько я понимаю, sk_buff поддерживает возможность помещать данные линейно, а также странично, то есть нелинейно. «Страничность» определяется структурой skb_shared_info, которая помещается сразу после skb. Вопрос — гарантирует ли ядро минимальное количество байт, которые могут быть размещены в линейной области?
Скомпилировал примеры из ядра в 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.