Какие-нибудь программы BPF требуются для карты памяти?
Я пишу программу BPF sockmap, и мне было интересно, каковы требования такой программы. К sockmap могут быть прикреплены парсер и программа вердикта, поэтому мой вопрос в том, требуется ли какая-либо из этих программ перед добавлением сокета на карту, и если оба не требуются, то каково поведение, когда любая из этих программ пропущена.
Некоторые запутанные связанные заявления, показывающие, почему у меня есть этот вопрос:
- Если никакие программы BPF не прикреплены, объект sock может использоваться только для перенаправления sock - я предполагаю, что это означает, что перенаправление программируется с помощью других средств, кроме программы вердикта, прикрепленной к самой карте sock?
- Важно прикрепить SOCKMAP как к программам синтаксического анализа, так и к программам вердикта - это означает, что необходимы как программы синтаксического анализа, так и программы вердикта, то есть одна не может существовать без другой?
- recv_sock -> str_parser (parse_prog) -> verdict_prog -> skb_send_sock - эта диаграмма ASCII также подразумевает, что, если программа синтаксического анализа пропущена, программа вердикта не получит ничего, на что можно воздействовать?
0 ответов
В текущей реализации sockmap для операции требуются как парсер, так и программа вердикта. Есть место для оптимизации: если пропустить программу парсера,skb->len
должен быть возвращен по умолчанию, но, к сожалению, это еще не реализовано.
Никакого другого способа программного перенаправления кроме программы вердикта. Это обязательно, без этого можно ставить программы в sockmap, но ничего не произойдет, передача данных остановится.
Скорее прикрепите программы синтаксического анализа и вердикта к sockmap. Они имеют смысл только в этом причинном порядке.
Да, это так. Так что у вас должна быть программа парсера, даже с простой
return skb->len
один.