{"action":"created","issue":{"url":"https://api.github.com/repos/SnabbCo/snabbswitch/issues/344","labels_url":"https://api.github.com/repos/SnabbCo/snabbswitch/issues/344/labels{/name}","comments_url":"https://api.github.com/repos/SnabbCo/snabbswitch/issues/344/comments","events_url":"https://api.github.com/repos/SnabbCo/snabbswitch/issues/344/events","html_url":"https://github.com/SnabbCo/snabbswitch/pull/344","id":54556906,"number":344,"title":"stateful packet_filter","user":{"login":"javierguerragiraldez","id":147561,"avatar_url":"https://avatars.githubusercontent.com/u/147561?v=3","gravatar_id":"","url":"https://api.github.com/users/javierguerragiraldez","html_url":"https://github.com/javierguerragiraldez","followers_url":"https://api.github.com/users/javierguerragiraldez/followers","following_url":"https://api.github.com/users/javierguerragiraldez/following{/other_user}","gists_url":"https://api.github.com/users/javierguerragiraldez/gists{/gist_id}","starred_url":"https://api.github.com/users/javierguerragiraldez/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/javierguerragiraldez/subscriptions","organizations_url":"https://api.github.com/users/javierguerragiraldez/orgs","repos_url":"https://api.github.com/users/javierguerragiraldez/repos","events_url":"https://api.github.com/users/javierguerragiraldez/events{/privacy}","received_events_url":"https://api.github.com/users/javierguerragiraldez/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":2,"created_at":"2015-01-16T09:46:23Z","updated_at":"2015-01-21T05:57:33Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/SnabbCo/snabbswitch/pulls/344","html_url":"https://github.com/SnabbCo/snabbswitch/pull/344","diff_url":"https://github.com/SnabbCo/snabbswitch/pull/344.diff","patch_url":"https://github.com/SnabbCo/snabbswitch/pull/344.patch"},"body":"This is a much better API for stateful filters.  In short: there are named \"connection tables\".  If a filter rule includes a `state_track = \"name\"` entry, any packet that passes that specific rule is tracked in that table.  A `state_check = \"name\"` entry adds to the rule the condition that this packet belongs to an existing connection.  Either of these lines can also appear 'naked', outside of any rule, which adds a state checking and/or tracking before any filter test.\r\n\r\nThe code seems clean and readable to me, but still need some real tests; the current `selftest()` just exercises the different options to show the generated code and track tables."},"comment":{"url":"https://api.github.com/repos/SnabbCo/snabbswitch/issues/comments/70788494","html_url":"https://github.com/SnabbCo/snabbswitch/pull/344#issuecomment-70788494","issue_url":"https://api.github.com/repos/SnabbCo/snabbswitch/issues/344","id":70788494,"user":{"login":"lukego","id":13791,"avatar_url":"https://avatars.githubusercontent.com/u/13791?v=3","gravatar_id":"","url":"https://api.github.com/users/lukego","html_url":"https://github.com/lukego","followers_url":"https://api.github.com/users/lukego/followers","following_url":"https://api.github.com/users/lukego/following{/other_user}","gists_url":"https://api.github.com/users/lukego/gists{/gist_id}","starred_url":"https://api.github.com/users/lukego/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukego/subscriptions","organizations_url":"https://api.github.com/users/lukego/orgs","repos_url":"https://api.github.com/users/lukego/repos","events_url":"https://api.github.com/users/lukego/events{/privacy}","received_events_url":"https://api.github.com/users/lukego/received_events","type":"User","site_admin":false},"created_at":"2015-01-21T05:57:33Z","updated_at":"2015-01-21T05:57:33Z","body":"@eugeneia Do you have an idea for how we should integrate this into the Neutron config? Goal is to be able to selectively enable stateful filtering e.g. on a per-port basis."}}