Commit graph

196 commits

Author SHA1 Message Date
Maximilian Wilhelm
9ee3a874d4 Add support for bonding / LAGs.
* Add a bond executor
  * Add mappings from ifupdown1/2
  * Add a detailed man page
  * Remove legacy compatiblity glue for setups with 'requires' only

  The current implementation has to work around the fact that member interfaces
  will be already up then the bond is created. This is simply done by downing
  them, adding them to the bundle and upping them again. This can possible be
  done in a nicer way after revisiting the ordering of plugin execution (#12).

  Closes #91

Signed-off-by: Maximilian Wilhelm <max@sdn.clinic>
2020-10-04 01:35:41 +02:00
Maximilian Wilhelm
3f67b2137d Add VXLAN support
Add a vxlan exectutor as well as mappings from ifupdown2 parameters to ours.

  Closes #75

Signed-off-by: Maximilian Wilhelm <max@sdn.clinic>
2020-10-02 02:20:10 +02:00
Maximilian Wilhelm
88f25e41c6 ifupdown: More specific error message.
Signed-off-by: Maximilian Wilhelm <max@sdn.clinic>
2020-09-25 02:28:05 +02:00
Maximilian Wilhelm
8dc2295006 ifupdown: Don't configure errornous interfaces.
Do not configure interfaces which have a configuration know to be broken.
  Currently this only happens when using "inherit" to an non-existing iface
  or to an iface and not a template, and having allow_any_iface_as_template
  set to 0.

  In those cases broken ifaces will not be configured unless ifup/ifdown is
  invoked with --force.

Signed-off-by: Maximilian Wilhelm <max@sdn.clinic>
2020-09-25 02:15:16 +02:00
Ariadne Conill
fafce2f262 config-file: add missing default for implicit_template_conversion 2020-09-24 15:36:22 -06:00
Ariadne Conill
60d0ed34b8 interface: make interface-to-template conversion a config option (defaulting to enabled) 2020-09-23 19:07:52 -06:00
Ariadne Conill
f224c04804 interface: explicitly convert any inherited interface into a template 2020-09-23 11:47:13 -06:00
Ariadne Conill
580f054d7e lifecycle: do not allow lif_lifecycle_run() on a template 2020-09-23 11:39:45 -06:00
Ariadne Conill
94f00b2fdc interface-file: do not allow templates to be set as automatic 2020-09-23 11:38:29 -06:00
Ariadne Conill
5c5c316ebf interface: add config setting to restrict inheritance to template interfaces 2020-09-23 11:34:35 -06:00
Ariadne Conill
a3987b46c8 interface-file: mark interface as template if template keyword is used 2020-09-23 11:29:01 -06:00
Ariadne Conill
eb70e48ece interface-file: add interface and template keywords as alias for iface 2020-09-23 11:26:28 -06:00
Ariadne Conill
f96cb273a0 interface-file: remap hardware-irq-coalesce- namespace to ethtool-coalesce- namespace 2020-09-21 09:56:48 -06:00
Ariadne Conill
2078f63e62 interface-file: remap debian hardware DMA ring terms to ethtool-dma namespace 2020-09-21 09:30:12 -06:00
Ariadne Conill
a8fcf5502f add a missing translation 2020-09-19 09:20:14 -06:00
Ariadne Conill
27e11adac6 interface-file: remap properties used by both debian and ifupdown2 ethtool addons to the ethtool- namespace 2020-09-19 09:20:14 -06:00
Ariadne Conill
d814aa754f config parser: explicitly skip over comments 2020-09-15 05:48:54 -06:00
Ariadne Conill
27a383cfa7 tokenizer: split out equals-as-delimiter tokenizer to its own function 2020-09-14 17:34:44 -06:00
Ariadne Conill
4b30dc4573 lifecycle: if lif_config.allow_addon_scripts is disabled, don't run addon scripts 2020-09-14 17:26:45 -06:00
Ariadne Conill
c1c9115e5d tokenize: fix tokenization of equals 2020-09-14 17:24:44 -06:00
Ariadne Conill
5b27d8408c config file: don't print warning if config file cannot be opened 2020-09-14 17:17:03 -06:00
Ariadne Conill
02d044c391 libifupdown: add config file loader 2020-09-14 17:15:18 -06:00
Ariadne Conill
fafa5ed7f9 libifupdown: add abstract config parser implementation 2020-09-14 17:11:59 -06:00
Ariadne Conill
537a56414a tokenize: consider = to be equivalent to whitespace 2020-09-14 16:50:31 -06:00
Ariadne Conill
a6e022ad99 lifecycle: re-sort the interface collection by hand 2020-09-09 19:21:41 -06:00
Ariadne Conill
258e2e8a52 lifecycle: return the maximum tree depth for the dependency tree when counting depth 2020-09-09 18:12:13 -06:00
Ariadne Conill
8c8727e30f lifecycle: drop redundant lif_lifecycle_query_dependents().
since we now precompile the full dependency tree, including depths,
we no longer need to re-query each leaf for dependency information.
2020-09-09 17:40:57 -06:00
Ariadne Conill
2569503afa lifecycle: add lif_lifecycle_count_rdepends(), which calculates reverse dependency depth 2020-09-09 17:39:26 -06:00
Ariadne Conill
67dce280d7 interface: add lif_interface.rdepends_count 2020-09-09 17:13:11 -06:00
Ariadne Conill
e6c6f49143 lifecycle: remove redundant lif_state_upsert() call
this will be handled by lif_state_ref_if(), which also updates the
refcounting.
2020-09-09 16:01:04 -06:00
Ariadne Conill
5a0b53cd73 libifupdown: add interface being run for each executor 2020-09-09 15:50:16 -06:00
Ariadne Conill
00da19a381 lifecycle: add create/destroy phases 2020-09-09 14:36:07 -06:00
Ariadne Conill
6999a125c8 state: include limits.h 2020-09-09 13:27:34 -06:00
Ariadne Conill
c021b9420f state: ensure rc is set to 1 if strtoul() fails 2020-09-09 11:56:19 -06:00
Ariadne Conill
3b178131bd state: sync refcounts using mapped interface name, not physical interface name 2020-09-08 19:25:00 -06:00
Ariadne Conill
b514d31c26 ifupdown: implement --force 2020-09-08 19:17:00 -06:00
Ariadne Conill
f139bc2416 lifecycle: consider an interface eligible for takedown if it has only one dependent (itself) 2020-09-08 15:50:32 -06:00
Ariadne Conill
ca07082ff4 state: fix parsing interface names in ifstate files 2020-09-08 15:37:35 -06:00
Ariadne Conill
6603ff1000 lifecycle: use refcounting to defer interface teardown 2020-09-08 15:28:36 -06:00
Ariadne Conill
288976f015 libifupdown: introduce lif_state_ref_if() and lif_state_unref_if(). 2020-09-08 15:05:02 -06:00
Ariadne Conill
865bf7cac6 state: plug memory leak when upserting 2020-09-08 15:02:39 -06:00
Ariadne Conill
8e4eb5d00c state: migrate to lif_state_record from a bare dictionary containing the mapped ifs 2020-09-08 14:59:58 -06:00
Ariadne Conill
923b96fab8 state: use lif_next_token() when parsing ifstate files 2020-09-08 14:46:07 -06:00
Ariadne Conill
3b10494b40 change lif_interface.is_up to lif_interface.refcount 2020-09-08 14:41:25 -06:00
Ariadne Conill
ae1dc41c88 lifecycle: constify lif_interface access in several functions 2020-09-07 13:41:11 -06:00
Maximilian Wilhelm
64b24b02ed Remove leading whitespaces before interface attribute values.
Signed-off-by: Maximilian Wilhelm <max@sdn.clinic>
2020-08-30 22:18:07 +02:00
Maximilian Wilhelm
570679c5bf lifecycle: Make sure to return true when script dir doesn't exist.
Signed-off-by: Maximilian Wilhelm <max@sdn.clinic>
2020-08-27 12:10:12 +02:00
Maximilian Wilhelm
61ed18db2c lifecycle: Check if script dir exist before executing run-parts.
Signed-off-by: Maximilian Wilhelm <max@sdn.clinic>
2020-08-27 01:15:51 +02:00
Ariadne Conill
4d64176ea3 execute: note the phase each executor is being invoked in 2020-08-26 02:06:36 -06:00
Ariadne Conill
aefaaa7457 lifecycle: only print skipping interface message if verbose 2020-08-24 11:33:56 -06:00
Ariadne Conill
3997b6a952
Merge pull request #38 from ifupdown-ng/bugfix/vlan-complex
vlan and assorted fixes
2020-08-24 11:14:45 -06:00
Ariadne Conill
de20e5f8a9 lifecycle: handle executors in reverse order when taking an interface down 2020-08-24 11:04:48 -06:00
Ariadne Conill
dfb979d00d list: add LIF_LIST_FOREACH_REVERSE() 2020-08-24 11:03:18 -06:00
Ariadne Conill
aba4b18862 lifecycle: add some helpful debug 2020-08-24 10:36:17 -06:00
Ariadne Conill
68021bc652
Merge pull request #35 from ifupdown-ng/feature/bsearch-parsing
interface config parser rewrite
2020-08-24 04:41:06 -06:00
Ariadne Conill
1384b38c78 interface: use link executor on vlans too 2020-08-24 03:06:32 -06:00
Ariadne Conill
6d15f21073 interface: handle is_bridge and is_bond hacks in a single place 2020-08-20 04:07:51 -06:00
Ariadne Conill
aba140a977 interface-file: use bsearch to find parser functions 2020-08-20 04:04:34 -06:00
Ariadne Conill
4a11d4fdd8 interface-file: break out source keyword handling 2020-08-20 03:46:31 -06:00
Ariadne Conill
df9c0284b1 interface-file: let commands initialize the interface collection themselves 2020-08-20 03:45:56 -06:00
Ariadne Conill
b57aba1a97 interface-file: split out auto keyword handling 2020-08-20 03:41:07 -06:00
Ariadne Conill
d36a522470 interface-file: add and use report_error() 2020-08-20 03:34:59 -06:00
Ariadne Conill
0928f07af5 interface-file: imply static executor use if gateway is specified 2020-08-20 03:20:07 -06:00
Ariadne Conill
e5c592f2c1 remove lif_interface.is_dhcp too 2020-08-20 03:14:57 -06:00
Ariadne Conill
846df3272f remove lif_interface.is_static, no longer used 2020-08-20 03:10:26 -06:00
Ariadne Conill
d463d455da simplify executor use statements 2020-08-20 03:08:29 -06:00
Ariadne Conill
075352b631 interface-file: remap ttl to tunnel-ttl 2020-08-19 06:20:15 -06:00
Ariadne Conill
c24143982f interface-file: map 'mode' to tunnel-mode 2020-08-19 06:19:05 -06:00
Ariadne Conill
9cc74b58c4 interface-file: remap legacy ifupdown & ifupdown2 tunnel parameters 2020-08-19 06:18:40 -06:00
Ariadne Conill
823544aace interface-file: map ppp-provider 2020-08-19 06:03:48 -06:00
Ariadne Conill
cb03eb1ee9 interface-file: remap problematic ifupdown2 tokens to our equivalents 2020-08-19 02:10:54 -06:00
Ariadne Conill
eeb40fc689 libifupdown: move ARRAY_SIZE() declaration from multicall 2020-08-19 01:58:41 -06:00
Ariadne Conill
049af8b9fb interface: if an interface name contains a period, treat it as a vlan device 2020-08-04 12:29:31 -06:00
Ariadne Conill
8615cf62ef interface: properly sync parent-child state when inheriting 2020-08-04 12:01:06 -06:00
Ariadne Conill
df2519c1ec dict: cleanups 2020-08-04 11:59:36 -06:00
Ariadne Conill
6728d2febe interface: add inherit property when inheriting 2020-08-04 11:48:22 -06:00
Ariadne Conill
6c7fa2919d interface-file: add support for inherit/inherits keyword 2020-08-04 11:46:56 -06:00
Ariadne Conill
3d5ca9050e interface: add lif_interface_collection_inherit() (ref #2) 2020-08-04 11:46:10 -06:00
Ariadne Conill
0eb25f1d62 interface file: simplify scanning iface directives for relevant keywords 2020-08-04 11:32:34 -06:00
Ariadne Conill
1964a99e5d lifecycle: don't insert a requires entry if it would be empty 2020-07-31 17:12:13 -06:00
Ariadne Conill
0ca8e42ee6 refactoring locking, make it per-interface to avoid deadlocks 2020-07-29 03:10:55 -06:00
Ariadne Conill
edfb91c05f lifecycle: separate environment building into build_environment() 2020-07-29 02:24:10 -06:00
Ariadne Conill
81d0ebc3e8 remove unnecessary strcmp wrapper, use typecasting instead 2020-07-28 17:57:51 -04:00
Ariadne Conill
cfbfa07e85 list: refactor lif_list_free_nodes() a bit 2020-07-28 17:53:48 -04:00
Ariadne Conill
58816712c6
Merge pull request #7 from BarbarossaTM/deduce-use
Deduce which addons to 'use' from parameters names
2020-07-28 17:50:32 -04:00
Maximilian Wilhelm
8045081024 list: Set pointer to free()ed list to NULL.
Signed-off-by: Maximilian Wilhelm <max@sdn.clinic>
2020-07-28 23:30:09 +02:00
Maximilian Wilhelm
9d958892ed Free nodes of a lif_dict_find_all() result.
Signed-off-by: Maximilian Wilhelm <max@sdn.clinic>
2020-07-28 23:25:01 +02:00
Maximilian Wilhelm
73f3690432 Deduce which addons to 'use' from parameters names (closes #6)
Signed-off-by: Maximilian Wilhelm <max@sdn.clinic>
2020-07-28 22:44:49 +02:00
Maximilian Wilhelm
2420023b74 Add comparator wrapper and type cast values properly.
Signed-off-by: Maximilian Wilhelm <max@sdn.clinic>
2020-07-28 22:44:42 +02:00
Maximilian Wilhelm
f51c976b52 dict: Add lif_dict_add_once()
Add a function to add a key/value pair to the dict only if it doesn't exist
  within the dict already.

  As the dict is type agnostic this requires a comparator function to be given.

Signed-off-by: Maximilian Wilhelm <max@sdn.clinic>
2020-07-28 22:44:22 +02:00
Maximilian Wilhelm
b1dfa609f9 dict: Add lif_dict_find_all().
As a dict can have multiple values for any given key we add a function to
  query all occurences of a given key and return them as a (new) list.

Signed-off-by: Maximilian Wilhelm <max@sdn.clinic>
2020-07-28 22:41:41 +02:00
Ariadne Conill
21bcbe1017 execute: fix memory leak in lif_execute_fmt_with_result() 2020-07-28 13:53:21 -06:00
Ariadne Conill
fb5ff4eac2 lifecycle: add support for learning dependents from executors (ref #5) 2020-07-28 13:46:25 -06:00
Ariadne Conill
3a75de9f8c execute: add lif_execute_buf_with_result() to collect a result buffer 2020-07-28 13:01:15 -06:00
Ariadne Conill
08805f7de3 lifecycle: handle_commands_for_phase(): drop unused lifname variable 2020-07-26 03:39:58 -06:00
Ariadne Conill
be00984946 lifecycle: stop bringing up links, use link executor instead 2020-07-26 03:38:55 -06:00
Ariadne Conill
52d2bad3b8 interface: always attach "use link" executor 2020-07-26 03:29:16 -06:00
Ariadne Conill
12307aeb9d lifecycle: remove static address configuration (replaced with static executor) 2020-07-26 03:20:35 -06:00
Ariadne Conill
cae16c5758 simplify loopback 2020-07-26 02:59:15 -06:00
Ariadne Conill
9e4e17707f lifecycle: expose INTERFACES_FILE env var to executors 2020-07-26 02:50:01 -06:00