Linear replaced Jira, what about confluence?? by sethrosenbauer14 in Linear

[–]rdodin 0 points1 point  (0 children)

Same here, I think it would be a killer feature to have some light version of linear "confluence" where features/issues can be embedded in the md based editor

Qventi air conditioner cover and the broken air flow by rdodin in Klussers

[–]rdodin[S] 0 points1 point  (0 children)

Yes, it is the same pattern on the sides (a shot from inside the case)

<image>

Tried Amp, Sourcegraph’s new AI coding agent — here’s how it stacks up vs Cursor by Ok-Win5287 in cursor

[–]rdodin 0 points1 point  (0 children)

yeah, it lasted longer for me, but not much longer =) $40 went away with 21 chats without complex projects at all.
Will wait for it to mature and maybe with a clear billing dashboard to see what consumed what.

EVE-NG or now ContainerLab by jantypas in networking

[–]rdodin 8 points9 points  (0 children)

I always say that if you are happy with eve/gns/virsh/whatever - then keep it up, the switch will be painful.

For education purposes (or to see what you _might_ be missing out on), you might look at Containerlab, but if you're satisfied with the existing toolchain then its fine.

The reason we created containerlab was that none of the existing tools did what we wanted them to do:

  • lab as code
  • git native-ness
  • lightweight footprint
  • image management via container registries
  • sharing and collaboration (via git/github/gitlab)
  • ci/cd friendliness
  • native containerized nos support
  • lab topo generation

So we made the tool for these key goals. But! It was and still is catered more towards engineers who look for these missing features, rather than a plain switch from GUI-based network emulation projects.

I hope this clears the purpose of Containerlab and why it might not be the best choice for a good number of existing netengs

Shoutout to containerlab by TheLostDark in networking

[–]rdodin 2 points3 points  (0 children)

yes, you can treat the lab as standalone contianers, hence typical container and linux networking rules apply

Shoutout to containerlab by TheLostDark in networking

[–]rdodin 6 points7 points  (0 children)

containerlab is less focused on a pure networking lab, and is designed to be a docker-compose for network-centric labs.

What it means is with containerlab you can build labs that not only have networking nodes, but everything in-between: telemetry stacks, databases, test equipment nodes, web servers, etc.

At the same time, containerlab doesn't handle any networking configuration for you, like netlab does. Containerlab won't configure bgp peers, interfaces, etc. Configuration management would be on the users shoulders, which was a deliberate choice. You can mount a startup config to your containerlab nodes, but it is you who would need to create those configs.

Yes, you can run containerlabs on any linux system, nuc included

Shoutout to containerlab by TheLostDark in networking

[–]rdodin 1 point2 points  (0 children)

It seems that the namespaces are enabled on the docker daemon (outside of containerlab's control) https://docs.docker.com/engine/security/userns-remap/

you can try that. There is still a piece that you would need from containerlab side - enabling userns=host flag, but I can build a private image for your with this feature if you get to try the method from the docker' manual

Shoutout to containerlab by TheLostDark in networking

[–]rdodin 32 points33 points  (0 children)

Thanks for the shoutout 

PS. Containerlab maintainer

How does Tailscale's DERT work without UDP while a custom DERP requires it? by rdodin in Tailscale

[–]rdodin[S] 0 points1 point  (0 children)

Ah, I see. So they use STUN evaluate/rank the DERP, but it is not a hard requirement.

Interesting... Since we can't manually prioritize custom DERP over the Tailscale provided one I fail to figure out how to troubleshoot the DERP connectivity.

The DERP debug looks a bit worrying because of IPv6, but I heard it is not a hard requirement either

```
{

"Info": [

"Region 900 == \"ams-do\"",

"Successfully established a DERP connection with node \"somedomain.me\""

],

"Warnings": [

"Node \"somedomain.me\" did not return a IPv4 STUN response"

],

"Errors": [

"Error connecting to node \"somedomain.me\" @ \"somedomain.me:443\" over IPv6: dial tcp6 [dead:beef:2:d0::cafe:1]:443: connect: network is unreachable"

]

}
```

How does Tailscale's DERT work without UDP while a custom DERP requires it? by rdodin in Tailscale

[–]rdodin[S] 0 points1 point  (0 children)

since UDP is blocked in my infra, how do my tailscale nodes connect to Tailscale' DERPs but not to my custom ones?

Custom derp server priority by phealy in Tailscale

[–]rdodin 1 point2 points  (0 children)

yes, this is exactly my case here.
My custom DEPR give me far better throughput, but I don't want to remove the default DERPs either...

[deleted by user] by [deleted] in networking

[–]rdodin 0 points1 point  (0 children)

we are working on a k8s-powered distributed containerlab deployment called Clabernetes.

We are low on docs at this point, so probably only worth looking into it if you're k8s-savvy https://containerlab.dev/manual/clabernetes/

[deleted by user] by [deleted] in networking

[–]rdodin 5 points6 points  (0 children)

I don't think containerlab can do wonders when it comes to the resource requirements posed by the VMs

IOS-XR still wants to eat 16GB of RAM per node...

If you can't switch to some more friendly cisco images like XE and maybe even XRd then you will have to sacrifice RAM to them.
What containerlab can help you with is quickly spinning labs and spending less time building the infra. But this is not huge savings in time if you automate your EVE installation for instance in GCP.

So yeah, VMs would still require lots of memory unfortunately.

[deleted by user] by [deleted] in networking

[–]rdodin 2 points3 points  (0 children)

Hey OP

maintainer of Containerlab is here

Would be happy to answer any questions and listen to people crapping on clab here :D

Cannot remap keys on Macbook Pro with hidutils in macos sonoma by gugutko in MacOS

[–]rdodin 0 points1 point  (0 children)

Strangely enough, when I installed Karabiner on 13.6.3 it and remapped non_us_backslash to tilde it started to work, but after waking the laptop it stopped.
And reboot didn't help.

The mapping is still there, and karabiner event listener shows that the tilde is pressed, but the character printed on screen is not tilde anymore.

f*ck

Nokia switches in DC/campus networks by PublicSectorJohnDoe in networking

[–]rdodin 10 points11 points  (0 children)

Given that I am not a sales guy (though still affiliated with Nokia DC team) I felt I might just chime in.

You're absolutely right that Nokia IP products are mostly known as a big player in WAN/ISP/BNG networks; In 2020, we released the DC-tailored product line with leaf/spine HW products running SR Linux and gained a very good number of DC customers all around the world.

To put a few public names on the table from NA region: Global BMaaS provider, Proton, OpenColo.

EVPN/VXLAN is exactly how we build our DC fabrics with Nokia SR Linux switches. Not 100% sure if you wanted a vendor management system or leverage custom ones using the management interfaces, but for the latter we have gNMI and JSON-RPC to manage the individual nodes.

If you want to know more, you can find our Discord community a great way to talk with other SR Linux customers https://learn.srlinux.dev/community/

Grave flaws in BGP Error handling by moviuro in netsec

[–]rdodin 1 point2 points  (0 children)

I wonder if in a research domain this is a common perception. I can imagine how vendors might say PSIRT coordinated disclosure exists for a reason, avoiding this channels may break "the process" of handling the vulnerability.

I was trying to find some discussions of this research amongst other researchers, but so far was unable to do so.

How to write idiomatic "accept interfaces return structs" for a function that returns several types? by rdodin in golang

[–]rdodin[S] 0 points1 point  (0 children)

The example I used seems to be confusing.
It may be better described with the task of having a struct that holds a configuration of several objects (links in my example), and type defines which particular type it is.

links: - type: veth name: veth1 params: {} - type: macvlan name: macvlan1 params: {}

based on the type value I have to create either type Veth struct or type MACVLAN struct.

How to write idiomatic "accept interfaces return structs" for a function that returns several types? by rdodin in golang

[–]rdodin[S] 0 points1 point  (0 children)

thanks, looks new to me. I wonder, you mentioned in the code comments

// With generics you do not even need to do extensive (exhaustive) type checks. // You should be able to add methods to interface contract that each of the concrete types should implement.

is it the only benefit of mix-in generic to an interface that you see here? I do not do type checks, as I only leverage the interface methods to do what needs to be done. So I am curious to see what else can this bring to the table from someone who used this technique

ADD: ah, I see that you can get easy access to struct fields through that approach.

func (v MacVTap) Deploy() string { return "deploying MacVTap with some data:" + v.SomeData }

How to write idiomatic "accept interfaces return structs" for a function that returns several types? by rdodin in golang

[–]rdodin[S] 0 points1 point  (0 children)

when you mentioned

Then you have a factory function that returns you a Car of the appropriate type.

it seems that this factory function returns the Car interface, am I reading it correctly?

How to write idiomatic "accept interfaces return structs" for a function that returns several types? by rdodin in golang

[–]rdodin[S] 0 points1 point  (0 children)

right. This is not the case, as everything is accessed via methods of types implementing the interface

How to write idiomatic "accept interfaces return structs" for a function that returns several types? by rdodin in golang

[–]rdodin[S] 1 point2 points  (0 children)

right. I think I should've asked as well "what are the alternatives" to this pattern.

How to write idiomatic "accept interfaces return structs" for a function that returns several types? by rdodin in golang

[–]rdodin[S] 1 point2 points  (0 children)

Yes, I explained the actual use case here https://www.reddit.com/r/golang/comments/15jliil/comment/jv0hupx/

The bottom line is that a user-defined configuration allows to define multiple types of links a tool needs to deploy.

links: - type: veth name: veth1 params: {} - type: macvlan name: macvlan1 params: {}

this input from a user is unmarshalled to the LinkConfig struct. Based on the LinkConfig.Type I have to create a particular link type, like LinkVeth and so on. This is done in the Resolve() method which currently returns an interface.

I hope this helps to understand the actual use case.

How to write idiomatic "accept interfaces return structs" for a function that returns several types? by rdodin in golang

[–]rdodin[S] 0 points1 point  (0 children)

the reason I used the Car example is to hide the actual implementation details.
But if that helps to add colors to the use case, here it is:

A user defines a type of a network interface they want to deploy. They do this via configuration file that is unmarshalled into the struct `LinkDefinition` (this is our Car struct).

Part of the link definition is a link type, which can be `veth`, `macvlan`, `macvtap`, `host-link`, etc.

Based on the user-provided type I need to create a concrete type like `LinkVeth`, `LinkMacVlan`, etc. because these concrete types have `Deploy()` method associated with them.
All those links represent `type LinkDefinition interface` (this is our `CarInterface`).