talos
1// This Source Code Form is subject to the terms of the Mozilla Public
2// License, v. 2.0. If a copy of the MPL was not distributed with this
3// file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
5package vm
6
7import (
8"net"
9"time"
10
11"github.com/pin/tftp/v3"
12"golang.org/x/sync/errgroup"
13
14"github.com/siderolabs/talos/pkg/provision/providers/vm/internal/ipxe"
15)
16
17// TFTPd starts a TFTP server on the given IPs.
18func TFTPd(ips []net.IP, nextHandler string) error {
19server := tftp.NewServer(ipxe.TFTPHandler(nextHandler), nil)
20
21server.SetTimeout(5 * time.Second)
22
23var eg errgroup.Group
24
25for _, ip := range ips {
26eg.Go(func() error {
27return server.ListenAndServe(net.JoinHostPort(ip.String(), "69"))
28})
29}
30
31return eg.Wait()
32}
33